我想使用cvHoughCircles()在图像中找到圆圈。 但我对第四个参数感到困惑,因为当我使用" 1"时,cvHoughCircles()找不到圆圈,当我使用" 2"时,该方法正常工作并检测所有圆圈在图像中。
Click Here查看两个案例的程序截图。
我在另一个图像上做了相同的操作,但这次将第四个参数的值从1改为2,没有影响结果[cvHoughCircles()为两种情况都返回了相同的结果(使用1或2为第四个参数的值)]。
有人可以告诉我在处理不同的图像时应该对第四个参数起什么值吗?
答案 0 :(得分:2)
点击此链接:
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)直到圆圈出现,但是你可以检测到文物,所以最大的圆圈应该是有兴趣的。最后,它取决于您通过算法的情况。