【发布时间】:2015-08-29 02:38:20
【问题描述】:
在下图中,您可以看到我能够很好地识别水平线,但垂直线的识别效果不是很好。特别是,没有看到网格的中间线,并且边线被透支(即相互连接)。
这是创建它的代码:
img = cv2.imread('./p6.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
threshhold, threshhold_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
edges = cv2.Canny(threshhold_img, 150, 200, 3, 5)
lines = cv2.HoughLinesP(edges,1,np.pi/180,500, minLineLength = 600, maxLineGap = 75)[0].tolist()
for x1,y1,x2,y2 in lines:
cv2.line(img,(x1,y1),(x2,y2),(0,255,0),1)
当我调整了不同的参数时,我最终会遇到这样一种情况,即最中间的垂直线(表格中 JEXXY 之前的那一条)从底部延伸到第三条的顶部网格。除非我将参数放宽到几乎每条线都被绘制出来,包括代表前三个网格顶部的yi、er、san 的线,否则我无法获得代码来查看定义的中间垂直线网格内部。
我该如何解决这个问题?
* 更新为使用 THRESH_BINARY_INV 而无需精明 *
img = cv2.imread('./p6.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
threshhold, threshhold_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV)
lines = cv2.HoughLinesP(edges,1,np.pi/180,500, minLineLength = 600, maxLineGap = 75)[0].tolist()
for x1,y1,x2,y2 in lines:
cv2.line(img,(x1,y1),(x2,y2),(0,255,0),1)
* 更新:使用 BINARY 和 OTSU 添加阈值 img *
【问题讨论】:
-
你可以在不使用 canny 的情况下尝试 THRESH_BINARY_INVERSE 吗? (请显示并发布中间结果)
-
你把它和OTSU结合了吗?阈值根本没有线条...您可以发布阈值的结果图像,threshhold_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) 吗?
标签: python opencv hough-transform canny-operator