2013-10-28 51 views
2

我试图找到使用Python包装的OpenCV的图像圈的所有对象。 喜欢的东西this找到所有圈子对象

使用cv2.HoughCircles,但我无法找到最佳参数。 有没有可能?

我的代码:

import cv, cv2 
import numpy as np 

im = cv2.imread("C:/1.jpg") 

grey = cv2.cvtColor(im, cv.CV_RGB2GRAY) 
blur= grey 
#blur = cv2.GaussianBlur(grey, (0,0), 10) 
circles = cv2.HoughCircles(blur, cv2.cv.CV_HOUGH_GRADIENT, 2, 5, np.array([]), 40, 80, 5, 50)#params? 
if circles is not None: 
     for c in circles[0]: 
       cv2.circle(im, (c[0],c[1]), c[2], (0,255,0),2) 
edges = cv2.Canny(blur, 40, 80) 

cv2.imwrite("C:/circle.jpg",im) 
cv2.imwrite("C:/canny.jpg",edges) 

enter image description here

enter image description here

+2

尝试'圈= cv2.HoughCircles(模糊,cv2.cv.CV_HOUGH_GRADIENT,1,16,np.array([]), 15,36,如图9所示,35)','用于CircularHough_Grd(红色MATLAB结果,[3 35],20%,15,1);'是这里(http://i.stack.imgur.com/bw5HL.jpg) 。它似乎仍然吸引更多的泡沫。 matlab版本使用'adapthisteq',它的opencv中的等价物是'createCLAHE'。我已经尝试过,但结果没有太大的不同,这意味着它可能是circularhough实现之间的区别。我注意到较小的雷达范围可以捕捉更多的东西,所以也许尝试多个不同的范围并将它们结合在一起 –

回答

1

这不是关于你所提供的图像一件容易的事。

尝试为您的半径找到一个很好的范围(minRadius,maxRadius:不要太大,否则一些小圈子会被视为一个大圆圈)也会改善您的结果。

否则我建议用另一种方法中,分离该对象(watershedding例如)