查看此链接:
http://docs.opencv.org/modules/imgproc/doc/feature_detection.html
它列出了所有函数的 c/c++/python 实现,说明了每个参数的作用,我一直发现其中一个是 javacv 一直在包装的(在本例中是 c 代码)。当我看到你的帖子时,我实际上正在寻找这个页面,所以如果它再次发生,我现在可以点击我自己的链接(太棒了!)。现在尽我所能回答您的问题。
函数如下所示:
CvSeq* cvHoughCircles(CvArr* image, void* circle_storage, int method, double dp, double min_dist, double param1=100, double param2=100, int min_radius=0, int max_radius=0 )
网站描述的地方:
dp – 累加器分辨率与图像分辨率的反比。例如,如果 dp=1 ,则累加器具有与输入图像相同的分辨率。如果 dp=2 ,累加器的宽度和高度只有一半。
我猜测(根据我在课堂上的记忆)这指的是有时用于特征检测的金字塔方案。基本上,您平均图像的像素以获得较小的图像,以便找到重要特征的位置,例如角落或在这种情况下最终基于梯度信息的圆圈(因此应该是黑白或灰度图像使用)。
使用 dp=1 应该完全没问题,但只需确保在图像上调用 cvSmooth() 以便梯度向量围绕圆圈形成一个漂亮的圆圈。如果您知道有一个圆圈,那么您可以继续平滑和扩张 (cvDilate) 直到圆圈出现,但随后您可能会检测到伪影,因此应该对最大的圆圈感兴趣。最后,这取决于您使用算法的情况。