前几天去面试的师兄,发了一道OpenCV的题目给我,要我一天做出来。题目如下:
检测出这张图片的三个不同其他的点,我的第一个想法是霍夫圆检测或者是寻找外轮廓。最后我放弃了寻找外轮廓,因为其检测的轮廓与轮廓之间的距离不能设置,这样我并不能知道,这三个点是否会被其他轮廓包含,从而导致每个轮廓并不是包含一个圆。排除掉寻找外轮廓,就剩下了霍夫圆检测。但我只在书本上了解过霍夫圆检测,并不知道OpenCV中霍夫圆检测具体参数设定。以下是我程序中的霍夫圆检测的参数设定。
vector<Vec3f>circles;
HoughCircles(img_cvt, circles, CV_HOUGH_GRADIENT,1,10, 100,10,5,13);
//第一个参数是输出被检测图片
//第二个参数表示存储数组,其中存储被检测的圆的圆心的坐标和圆的半径。
//第三个参数默认,因为检测圆的方法,OpenCV2.*.*版本之中只有霍夫梯度法。
//第四个参数可以设置为1就行--默认参数
//第五个参数是圆心与圆心之间的距离,这是一个经验值。这个大了,那么多个圆就是被认为一个圆。
//第六个参数 就设为默认值就OK
//第七个参数是根据你的图像中的圆大小设置,当这张图片中的圆越小,那么此值就设置应该被设置越小。当设置的越小,那么检测出的圆越多,在检测较大的圆时则会产生很多噪声。所以要根据检测圆的大小变化。
//第八个和第九个参数 是你检测圆 最小半径和最大半径是多少。这个值也是为了进一步筛选检测出的圆。
其效果如下图所示: