以前の質問をもとに表の認識の実験をしております
https://teratail.com/questions/151317
そこで以下のソースで表の枠を認識してみました。
python
1import cv2 2import numpy as np 3 4img = cv2.imread('no300.jpg') 5 6# BGR -> グレースケール 7gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 8# エッジ抽出 (Canny) 9edges = cv2.Canny(gray, 1, 100, apertureSize=3) 10cv2.imwrite('edges.png', edges) 11# 膨張処理 12kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) 13edges = cv2.dilate(edges, kernel) 14cv2.imwrite('edges2.png', edges) 15# 輪郭抽出 16contours,hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 17# 面積でフィルタリング 18rects = [] 19for cnt, hrchy in zip(contours, hierarchy[0]): 20 if cv2.contourArea(cnt) < 2000: 21 continue # 面積が小さいものは除く 22 if hrchy[3] == -1: 23 continue # ルートノードは除く 24 # 輪郭を囲む長方形を計算する。 25 rect = cv2.minAreaRect(cnt) 26 rect_points = cv2.boxPoints(rect).astype(int) 27 rects.append(rect_points) 28 29# x-y 順でソート 30rects = sorted(rects, key=lambda x: (x[0][1], x[0][0])) 31 32# 描画する。 33for i, rect in enumerate(rects): 34 cv2.drawContours(img, rects, i, (0,0,255), 2) 35 36cv2.imwrite('img.png', img)
###解決したいこと
住所、氏名、生年月日のあたりに意図しない斜めになった四角の枠が認識されています。
これを認識しない方法はございませんでしょうか。
試したこと
cv2.contourArea(cnt) < 2000:
の部分を調整してみますが、大きくしすぎると欲しいデータまで消えてしまいます。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー