繁体   English   中英

使用OpenCV在Objective-C ++中进行种子生长和霍夫圈

[英]Seed Growing and Hough Circles in Objective-C++ using OpenCV

我正在使用Objective-C ++和OpenCV检测图像上的球。 我尝试使用HoughCircle转换,但未正确检测到球。 对我来说,参数似乎不适合该功能的描述。 Objective-C ++和C ++有什么不同?

这是我的代码和OpenCV函数的描述:

cv::medianBlur(grayMat, grayMat, 17);
std::vector<cv::Vec3f> circles;
cv::HoughCircles(grayMat, circles, CV_HOUGH_GRADIENT,
                 1,     //dp resolution
                 1,     //minDist
                 140.0, //higher threshold
                 120.0, //lower threshold
                 15,    //min radius
                 50);   //max radius

如果参数在我实现它们时是正确的,则想法是使用种子生长以获得更好的结果。 我不知道如何在Objective-C ++和OpenCV中实现它。 我已经在C ++中看到了一些示例,但是我不知道如何将其“转换”为Objective-C ++。

您能否看一下我的HoughCircle参数或给我一个用于种子生长的Objective-C ++示例?

非常感谢!

编辑:这是两个示例图像-我需要通用参数来检测两个图片上的球:

示例图片1

示例图片2

您可以在目标C ++项目上使用OpenCV的C ++ API,而无需进行任何更改。

我尝试了您的代码,并编辑了一些参数。 以下参数将检测所有圆圈:

cvtColor(img, gray, COLOR_BGR2GRAY);
medianBlur(gray, gray, 13);
vector<Vec3f> circles;
HoughCircles(gray, circles, HOUGH_GRADIENT, 1,
                 gray.rows/16, 
                 100, 30, 15, 250
                 );

尝试使用此代码后,您将注意三件事:

  1. 增大中值滤波器大小将消除第二个图像中的假圆圈。
  2. 更改要检测的圆的大小范围会导致检测图像1中的所有圆。
  3. 现在可以检测到图像二中的圆圈,但是大小非常不准确。 对于这两个图像,我建议进行后处理(如您提到的那样,种子要长大?)以检测所有正确的像素。

在执行这样的项目时,最好在开始分析图像之前将图像调整为固定大小。 对于不同的图像分辨率,参数值将有所不同,除非您找到一种将其标准化的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM