我正在学习opencv,我有一个问题要问你。我得到了最终处理过的图像。
原始图像是两个接近的球,它们是相同的颜色。我会得到每个球的中心和半径。如果球是远的,我使用findContours和drawContours选项CV_FILLED这样做,所以我可以做每个球的像素位置的平均值,我得到中心。问题是当球靠近时,我没有得到两个不同的轮廓,我不能做像素位置的平均值。我获得此图像(中心用圆圈表示):
你可以提一些建议吗? 我使用Canny算法进行边缘检测。答案 0 :(得分:2)
我写了一个简单的matlab代码来检测两个圆圈:
filen='http://i.stack.imgur.com/sDNS8.jpg' % your image
I=imread(filen);
I=im2bw(I(:,:,3)); % gray scale
Rmin=20;Rmax=70; % circle range
% find circles in the image with Hough transform
[centersDark, radiiDark] = imfindcircles(I, [Rmin Rmax], ...
'ObjectPolarity','dark','sensitivity',0.93)
imagesc(I),hold on
viscircles(centersDark, radiiDark,'LineStyle','--');hold off
结果:
正如上面提到的@ChronoTrigger,opencv中的hough变换包应该适用于你的情况。
答案 1 :(得分:1)
霍夫变换是检测图像中几何实体的常用方法。 OpenCV具有为圆圈实现的功能。看看这个:
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_circle/hough_circle.html