0

Python、OpenCV、numpy で HoughLines() を使用する方法を学んでいます。次の画像を使用します。

ここに画像の説明を入力

そして、最も太い線だけでなく、すべての線を検出しようとしています。結果は次のとおりです。

ここに画像の説明を入力

そして、ここに私のコードがあります:

import cv2
import numpy as np
import argparse

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="path to the imput image")
args = vars(ap.parse_args())

img = cv2.imread(args['image'])
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
cv2.imwrite('edges_found.jpg',edges)
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)

for r,theta in lines[0]:
    a = np.cos(theta)
    b=np.sin(theta)
    x0 = a*r
    y0 = b*r
    x1 = int(x0 + 1000*(-b))
    y1 = int(y0 + 1000*(a))
    x2 = int(x0 - 1000*(-b))
    y2 = int(y0 - 1000*(a))

    cv2.line(img, (x1,y1), (x2,y2), (0,0,255), 2)

cv2.imwrite('linesDetected.jpg',img)

ここでチュートリアル/コードを使用しています: https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_houghlines/py_houghlines.html

これは単純なように見えますが、チュートリアルでは、使用されている画像は新聞の数独であり、単一の行を取得している場所に多くの行が返されます。コードでedgesわかるように、別の画像に出力して、そこで何が起こっているかを確認しました。結果は次のとおりです。

ここに画像の説明を入力

多くのエッジが見つかったようですが、多くではなく、1 本の赤い線しか得られません。私のコードはどこが間違っていますか?

4

1 に答える 1