如何将霍夫圆法应用于阈值图像?
How can I apply the hough circle method to a thresholded image?
我目前有一个程序可以使用 openCV 检测彩球,我想添加 HoughCircle 方法以使其更好。
我想在从 inRange 方法获得的阈值图像上应用 HoughCircle 方法,但不幸的是它不起作用。
我看到HoughCircle方法只拍灰度图,有没有办法将阈值图像传递给它?
我就是这样做的:
int isBall(Mat threshold){
Mat temp;
threshold.copyTo(temp);
std::vector<Vec3f> circles;
HoughCircles(temp, circles, CV_HOUGH_GRADIENT, 1, temp.rows/8
, 100
, 50
, 15 /* min radius */
, 200 /* max radius */
);
printf("nb circles = %d\n", circles.size());
if(circles.size() > 0){
return 1;
}
return 0;
}
阈值图像来自:
inRange(HSV,Scalar(H_MIN,S_MIN,V_MIN),Scalar(H_MAX,S_MAX,V_MAX),threshold);
这是我可以获得的阈值图像示例:
https://www.noelshack.com/2019-39-5-1569586501-threshold.png
在此先感谢您的帮助。
您遇到的问题与HoughCircles中使用的参数有关。如果将示例图像转换为灰度图像,则可以很好地使用示例图像。
罪魁祸首是param2=50
,也就是一个threshold for circle centers at detection stage。如果将它设置为较小的值,算法将能够return 圆。
我已经使用 param2=10
测试了 HoughCircles()
,结果是这样的:
我目前有一个程序可以使用 openCV 检测彩球,我想添加 HoughCircle 方法以使其更好。
我想在从 inRange 方法获得的阈值图像上应用 HoughCircle 方法,但不幸的是它不起作用。 我看到HoughCircle方法只拍灰度图,有没有办法将阈值图像传递给它?
我就是这样做的:
int isBall(Mat threshold){
Mat temp;
threshold.copyTo(temp);
std::vector<Vec3f> circles;
HoughCircles(temp, circles, CV_HOUGH_GRADIENT, 1, temp.rows/8
, 100
, 50
, 15 /* min radius */
, 200 /* max radius */
);
printf("nb circles = %d\n", circles.size());
if(circles.size() > 0){
return 1;
}
return 0;
}
阈值图像来自:
inRange(HSV,Scalar(H_MIN,S_MIN,V_MIN),Scalar(H_MAX,S_MAX,V_MAX),threshold);
这是我可以获得的阈值图像示例: https://www.noelshack.com/2019-39-5-1569586501-threshold.png
在此先感谢您的帮助。
您遇到的问题与HoughCircles中使用的参数有关。如果将示例图像转换为灰度图像,则可以很好地使用示例图像。
罪魁祸首是param2=50
,也就是一个threshold for circle centers at detection stage。如果将它设置为较小的值,算法将能够return 圆。
我已经使用 param2=10
测试了 HoughCircles()
,结果是这样的: