Opencv cvHoughCircles-参数疑惑

时间:2012-05-25 12:03:44

标签: opencv

我对cvHoughCircles参数有些怀疑。我有一个有一些圆圈的图像,我想要计算它们,计数给了我一个错误的圆圈数。

所以我不知道如何选择一些函数的参数,如:

dp,min_dist,param1,param2,min_radius, max_radius.

我不知道我在这个参数中使用了什么数字。我该如何计算呢?

1 个答案:

答案 0 :(得分:1)

选择参数取决于您使用的图像。有关参数本身的说明,请参见此处的参考资料

http://opencv.willowgarage.com/documentation/cpp/imgproc_feature_detection.html#cv-houghcircles

使用具有以下参数的功能

HoughCircles(gray, circles, CV_HOUGH_GRADIENT,2, gray->rows/4, 200, 100, 10, 50);

将搜索dp为2的圆圈,图像的1/4圆圈与最大200,100的累加器值之间的最小距离,以确定接受圆圈的内容。 10和50是圆圈接受的最小和最大半径。

如果您在查找这些参数时遇到问题,请尝试制作一个将这些值附加到滑块的测试程序,以便您可以在测试图像上看到结果。

特别是param2很难通过测量来确定。因为您知道图片中有多少个圆圈,所以您可以通过以下方式进行参数抓取:

for(int i=0;i<200;i++) {
 cv::HoughCircles(gray, circles, CV_HOUGH_GRADIENT,2, gray->rows/4, 200, i, 10, 50);
 std::cout<<"HoughCircles with param2="<<i<<" gives "<<circles.size()<<" circles"<<endl;
}

我不知道param1和2是如何完全相关的,但是您可以使用double for循环来找到最佳值。其他值需要从图片中测量。除了制作屏幕截图,您还可以使用以下功能保存此图像:

cvSaveImage("image.jpg",gray);

确保您确实测量的确切图片。