Python OpenCV HoughCircles 没有给出好的结果
Python OpenCV HoughCircles not giving good results
我需要做快速准确的圆检测,所以我认为使用 OpenCV 的 Hough Circle 是一个不错的选择。不幸的是,无论我给它的图像有多好以及我调整了多少参数,它都拒绝检测图像中的所有圆圈。这是我的输入图像:
我想检测每个圆圈。首先我运行图像通过滤色器提取灰度
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)
我应该使用另一种技术吗?我用轮廓得到了很好的结果,但是速度很慢。
你可以尝试做一个 cv2.dilate(img, kernel) 来加粗线条,然后再尝试做 houghCircles 方法。
另外一种处理噪点的一般方法是执行 cv2.erode(img, kernel) 来淡化白色,从而去除图像中的小像素。
Kernel 只是一个类似于 np.ones() 的矩阵,但您可以尝试各种不同的矩阵,直到获得最有利的结果。
但是,永远不要指望计算机视觉能够 100% 做好或快速完成工作。如果你达到 80% 就很好了(当然取决于实际的图像质量,我并不是说在油漆绘制的图像上不可能有 100%)......
我需要做快速准确的圆检测,所以我认为使用 OpenCV 的 Hough Circle 是一个不错的选择。不幸的是,无论我给它的图像有多好以及我调整了多少参数,它都拒绝检测图像中的所有圆圈。这是我的输入图像:
我想检测每个圆圈。首先我运行图像通过滤色器提取灰度
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)
我应该使用另一种技术吗?我用轮廓得到了很好的结果,但是速度很慢。
你可以尝试做一个 cv2.dilate(img, kernel) 来加粗线条,然后再尝试做 houghCircles 方法。
另外一种处理噪点的一般方法是执行 cv2.erode(img, kernel) 来淡化白色,从而去除图像中的小像素。
Kernel 只是一个类似于 np.ones() 的矩阵,但您可以尝试各种不同的矩阵,直到获得最有利的结果。
但是,永远不要指望计算机视觉能够 100% 做好或快速完成工作。如果你达到 80% 就很好了(当然取决于实际的图像质量,我并不是说在油漆绘制的图像上不可能有 100%)......