【发布时间】:2023-03-20 18:43:01
【问题描述】:
我对@987654321@参数有些疑惑。我有一张包含一些圆圈的图片,我想数一数,但数出来的圆圈数有误。
所以我不知道如何选择一些函数的参数,例如:
dp,min_dist,param1,param2,min_radius, max_radius.
我不知道我在这个参数中使用了哪些数字。我该如何计算?
【问题讨论】:
标签: opencv
我对@987654321@参数有些疑惑。我有一张包含一些圆圈的图片,我想数一数,但数出来的圆圈数有误。
所以我不知道如何选择一些函数的参数,例如:
dp,min_dist,param1,param2,min_radius, max_radius.
我不知道我在这个参数中使用了哪些数字。我该如何计算?
【问题讨论】:
标签: opencv
选择参数取决于您使用的图像。参数本身的解释可以在参考这里找到
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);
以确保您真正测量的是准确的图片。
【讨论】: