0

我正在尝试使用 emguCv 检测图像的角落。为此,我在 emguCv 中使用了 Harris Corner 检测方法。但输出结果是模糊的,使用该方法我无法获得图像中角的数量。当我搜索时,我在 OpenCvSharp 中找到了一个检测角点的代码,它会按照我的意愿给出输出。我试图将 OpenCvSharp 代码转换为 EmguCv,然后我就卡在这里了。将“Cv.GoodFeaturesToTrack()”方法转换为 EmguCv 时。在 EmguCv 结构中,它需要 11 个参数,对于最后 4 个参数,我应该传递什么?有人能帮我吗?

OpencvSharp代码如下:

IplImage src;
IplImage gray;
IplImage eigImg;

        public void Grascale()
        {
            gray = Cv.CreateImage(src.Size, BitDepth.U8, 1);
            Cv.CvtColor(src, gray, ColorConversion.RgbToGray);
            Cv.SaveImage("grayimg.jpg", src);
        }

        public void DetectCorners()
        {
            Grascale();
            int cornerCount = 15000000;


            using (src)
            using (gray)
            using (IplImage eigImg = new IplImage(gray.GetSize(), BitDepth.F32, 1))
            using (IplImage tempImg = new IplImage(gray.GetSize(), BitDepth.F32, 1))

            {
                CvPoint2D32f[] corners;
                Cv.GoodFeaturesToTrack(gray, eigImg, tempImg, out corners, ref cornerCount, 0.1, 15);
                Cv.FindCornerSubPix(gray, corners, cornerCount, new CvSize(3, 3), new CvSize(-1, -1), new CvTermCriteria(20, 0.03));

                for (int i = 0; i < cornerCount; i++)
                    Cv.Circle(src, corners[i], 3, new CvColor(0, 0, 255), 2);

                Cv.SaveImage("result_img.jpg", src);

            }
        }
4

1 回答 1

0

你最好使用 findcountours 方法。然后, approxPolyDP 这样你就可以获得“角”(取决于形状),然后是cornersSubPix 来逼近更多的结果,并应用一些逻辑循环来对相似的段进行分组。

于 2017-03-07T05:36:26.690 回答