在下图中,您可以看到我能够很好地识别水平线,但垂直线并没有那么好。特别是,没有看到网格的中间线,而侧线被透支(即相互连接)。
这是创建它的代码:
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 *