Objective-C+中的种子生长和Hough圆+;使用OpenCV

Objective-C+中的种子生长和Hough圆+;使用OpenCV,opencv,geometry,detection,objective-c++,hough-transform,Opencv,Geometry,Detection,Objective C++,Hough Transform,我正在使用Objective-C++和OpenCV检测图像上的球。 我尝试使用HoughCircle变换,但我没有正确地检测球。对我来说,参数似乎不适合函数的描述。ObjuleC++中的C++与C++的不同吗? 这是我的代码和OpenCV函数的说明: cv::medianBlur(grayMat, grayMat, 17); std::vector<cv::Vec3f> circles; cv::HoughCircles(grayMat, circles, CV_HOUGH_GRAD

我正在使用Objective-C++和OpenCV检测图像上的球。 我尝试使用HoughCircle变换,但我没有正确地检测球。对我来说,参数似乎不适合函数的描述。ObjuleC++中的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
cv::medianBlur(格雷马特,格雷马特,17岁);
std::向量圆;
cv::HoughCircles(灰度、圆、cv_HOUGH_渐变、,
1,//dp分辨率
1、//心灵主义者
140.0,//更高的阈值
120.0,//下限阈值
15,//最小半径
50);   //最大半径
如果参数在我实现时是正确的,那么我的想法是使用种子生长来获得更好的结果。我不知道如何在Objective-C++和OpenCV中实现这一点。我已经看到了C++中的一些例子,但是我不知道如何将它翻译成Objul-C++。 你能看看我的Houghcirle参数吗,或者给我一个Objective-C++的种子生长示例

非常感谢

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


< P>可以在Objenc C++项目中使用OpenCV的C++ API,没有变化。p> 我尝试了你的代码并编辑了一些参数。以下参数将检测所有圆:

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
                 );
CVT颜色(img,灰色,颜色为灰色);
中蓝色(灰色,灰色,13);
矢量圆;
HOUGH圆(灰色、圆形、HOUGH_渐变、1、,
gray.rows/16,
100, 30, 15, 250
);
尝试此代码后,您将注意到三件事:

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

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

    谢谢,我在上面的问题中添加了两个链接。在我的应用程序中,我必须能够在不同的背景和光线条件下拍摄照片并检测球。你有时间查看参数吗?谢谢刚刚注意到您添加了图像,很抱歉延迟。明天早上我会试试这个。哇,谢谢你,这已经帮了大忙了!你是如何找到这些参数的?是否存在一些默认值?您知道如何在Objective-C++和OpenCV中实现区域生长(种子生长)算法吗?我在OpenCV库中找不到一种叫做种子生长的东西。它被称为不同吗?对于中值滤波器,当照片分辨率较高时,滤波器的大小必须较大,以便有效地去除噪声和背景纹理。我还通过查看可能的圆半径来调整Hough圆的半径参数。观察样本数据并相应调整参数是很常见的。Grabbcut是提取球体缝隙的一种可能方法。