cvHoughCircles
我对参数有一些疑问。我有一个有一些圆圈的图像,我想数一数,计数给了我错误的圆圈数。
所以我不知道如何选择一些函数的参数,比如:
dp,min_dist,param1,param2,min_radius, max_radius.
我不知道我在这个参数中使用了哪些数字。我该如何计算?
cvHoughCircles
我对参数有一些疑问。我有一个有一些圆圈的图像,我想数一数,计数给了我错误的圆圈数。
所以我不知道如何选择一些函数的参数,比如:
dp,min_dist,param1,param2,min_radius, max_radius.
我不知道我在这个参数中使用了哪些数字。我该如何计算?
选择参数取决于您使用的图像。参数本身的解释可以在参考这里找到
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);
以确保您真正测量的是准确的图片。