我正在尝试使用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);
}
}
答案 0 :(得分:0)
你最好使用findcountours方法。然后,aboutPolyDP使你可以得到“角落”(取决于形状),然后使用cornerSubPix来逼近结果,并应用一些逻辑循环来对相似的段进行分组。