我对cvHoughCircles
参数有些怀疑。我有一个有一些圆圈的图像,我想要计算它们,计数给了我一个错误的圆圈数。
所以我不知道如何选择一些函数的参数,如:
dp,min_dist,param1,param2,min_radius, max_radius.
我不知道我在这个参数中使用了什么数字。我该如何计算呢?
答案 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);
确保您确实测量的确切图片。