1

OpenCv を使用して画像内の直線を検出しています。以下はコードです:

import cv2
import numpy as np

img = cv2.imread('Image.jpg')
img = img[:, 10:img.shape[1]-10]
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
minLineLength = img.shape[1] - 300
lines = cv2.HoughLinesP(image=edges, rho=0.02, theta=np.pi / 500, threshold=10, lines=np.array([]), minLineLength=minLineLength, maxLineGap=2)
a, b, c = lines.shape
for i in range(a):
    cv2.line(img, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (0, 0, 255), 2, cv2.LINE_AA)
cv2.imwrite('result.png', img)

画像(PDFのスクリーンショットImage.jpg下)の場合、結果としてresult.png)を取得していますが、これはまさに私が望む出力です。

画像.jpg ここに画像の説明を入力

結果.png ここに画像の説明を入力

しかし、以下の Image Test.jpgを入力として与えると、アルゴリズムが正しく機能しません。次のエラーが発生しています。

a, b, c = lines.shape # 10th Line
AttributeError: 'NoneType' object has no attribute 'shape'

Test.jpgでは水平線がまっすぐではないため (電話のカメラでこれをクリックしたため)、またminLineLength値を100に変更すると、上記のエラーは表示されず、それぞれに不完全な色あせた線が表示されるためだと思います行。アルゴリズムを正しく機能させるには、アルゴリズムでどのパラメーターを変更する必要があるか教えてください。

テスト.jpgここに画像の説明を入力

4

2 に答える 2