Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV HoughCircles没有给出好的结果_Python_Opencv_Geometry_Contour - Fatal编程技术网

Python OpenCV HoughCircles没有给出好的结果

Python OpenCV HoughCircles没有给出好的结果,python,opencv,geometry,contour,Python,Opencv,Geometry,Contour,我需要快速准确地检测圆,所以我认为使用OpenCV的Hough圆将是一个不错的选择。不幸的是,无论我给它一个多么好的图像,无论我调整了多少参数,它都拒绝检测图像中的所有圆。这是我的输入图像: 我想检测这些圆圈中的每一个。首先,我通过一个颜色过滤器运行图像来提取灰色 frame = cv2.imread("new1.JPG") hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) lower_gray = np.array([0, 0, 0], dtype=

我需要快速准确地检测圆,所以我认为使用OpenCV的Hough圆将是一个不错的选择。不幸的是,无论我给它一个多么好的图像,无论我调整了多少参数,它都拒绝检测图像中的所有圆。这是我的输入图像:

我想检测这些圆圈中的每一个。首先,我通过一个颜色过滤器运行图像来提取灰色

frame = cv2.imread("new1.JPG")
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

lower_gray = np.array([0, 0, 0], dtype=np.uint8)
upper_gray = np.array([100,100,100], dtype=np.uint8)

mask = cv2.inRange(frame, lower_gray, upper_gray)
res = cv2.bitwise_and(frame,frame, mask= mask)

gray = cv2.cvtColor(res, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 1, 255, cv2.cv.CV_THRESH_BINARY)
这给了我以下的临界值,我认为这实际上非常好。

即使有这么好的阈值,圆检测也只能算是平庸

circles = cv2.HoughCircles(thresh,cv2.cv.CV_HOUGH_GRADIENT,1,20,param1=50,param2=10,minRadius=2,maxRadius=15) 


我还应该使用其他技术吗?我对轮廓线有很好的效果,但速度很慢。

在尝试使用houghCircles方法之前,可以尝试使用cv2.Explate(img,kernel)来加厚线条

另外,处理噪声的一般方法是使用cv2.corre(img,kernel)来稀释白色,从而去除图像中的小像素

进一步阅读:

内核只是一个类似np.ones()的矩阵,但您可以尝试各种不同的矩阵,直到得到最有利的结果

然而,千万不要指望计算机视觉能100%地做好工作,或者快速完成。如果你达到80%,你做得很好(当然,这取决于实际的图像质量,我并不是说不可能100%地使用油漆绘制图像)