0

cvHoughCircles我对参数有一些疑问。我有一个有一些圆圈的图像,我想数一数,计数给了我错误的圆圈数。

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

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

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

4

1 回答 1

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 是如何完全相关的,但是您可以使用双 for 循环来做同样的事情来找到最佳值。其他值需要从图片中测量。除了制作屏幕截图,您还可以使用以下功能保存此图像:

cvSaveImage("image.jpg",gray);

以确保您真正测量的是准确的图片。

于 2012-05-25T12:20:51.067 回答