web-dev-qa-db-ja.com

OpenCVでテーブル画像の行と列の数を検出する

Opencvを介してImageテーブルの行数と列数を取得するにはどうすればよいですか。

私が正しくなっているテーブルのボックスを取得するためのコード

contours, hierarchy = cv2.findContours(img_final_bin, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

def sort_contours(cnts, method="left-to-right"):
# initialize the reverse flag and sort index
reverse = False
i = 0
# handle if we need to sort in reverse
if method == "right-to-left" or method == "bottom-to-top":
    reverse = True
# handle if we are sorting against the y-coordinate rather than
# the x-coordinate of the bounding box
if method == "top-to-bottom" or method == "bottom-to-top":
    i = 1
# construct the list of bounding boxes and sort them from top to
# bottom
boundingBoxes = [cv2.boundingRect(c) for c in cnts]
(cnts, boundingBoxes) = Zip(*sorted(Zip(cnts, boundingBoxes),
    key=lambda b:b[1][i], reverse=reverse))
# return the list of sorted contours and bounding boxes
return (cnts, boundingBoxes)

(contours, boundingBoxes) = sort_contours(contours, method="top-to-bottom")

3
anant

他のアプローチの1つは、まずそれが実際のテーブルであるかどうかを確認することです。そのハフの線変換を使用できます。これが完了すると、上でフェローによって説明されたアプローチを使用できます。

0

簡単な解決策のように、最初に左から右に見て各ピクセルが黒であるかどうかを確認することです(列が見つかったことを示します。次に、行に対して同じことを行います(各ピクセルが上から下に黒の場合、それは行が見つかりました)。

複雑さの1つは、線の幅です。つまり、白色が見つかるまで、1行/列のみと数えます。

このためのコードを作成することはできましたが、今は家にいないので、他の誰かがコードを書いてもいいので、後で答えを削除します。私はこれがコメントである可能性があることを知っていますが、50の評判はありません。

0