使用 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++ 中看到了一些示例,但我不知道如何将其 "translate" 转换为 Objective-C++。
你能看看我的 HoughCircle 参数或给我一个 Objective-C++ 种子生长的例子吗?
非常感谢!
编辑:这是两个示例图像 - 我需要通用参数来检测两张图片上的球:
Example image 1
Example image 2
您可以在 Objective 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 中的所有圆圈。
- 现在检测到图像二中的圆圈,但大小非常不准确。对于这两张图片,我建议使用 post-processing(种子生长,如你所说?)来检测所有正确的像素。
做这样的项目时,最好在开始分析之前将图像调整为固定大小。参数值对于不同的图像分辨率会有所不同,除非你找到一种方法来标准化它们。
我正在使用 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++ 中看到了一些示例,但我不知道如何将其 "translate" 转换为 Objective-C++。
你能看看我的 HoughCircle 参数或给我一个 Objective-C++ 种子生长的例子吗?
非常感谢!
编辑:这是两个示例图像 - 我需要通用参数来检测两张图片上的球:
Example image 1
Example image 2
您可以在 Objective 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 中的所有圆圈。
- 现在检测到图像二中的圆圈,但大小非常不准确。对于这两张图片,我建议使用 post-processing(种子生长,如你所说?)来检测所有正确的像素。
做这样的项目时,最好在开始分析之前将图像调整为固定大小。参数值对于不同的图像分辨率会有所不同,除非你找到一种方法来标准化它们。