下の画像では、水平線は非常によく認識できていますが、垂直線はあまりうまく認識されていません。特に、グリッドの中央の線がまったく表示されておらず、横の線が過剰に描画されています (つまり、互いに接続されています)。
これを作成したコードは次のとおりです。
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
) が下から 3 番目のグリッドの上まで伸びているような状況になります。yi
最初の 3 つのグリッドの上部にある,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 を使用してしきい値画像を追加 *