Opencv 3.0とpythonでLSDを実装するためのサンプル実装コードまたはポインターを提供できますか? HoughLinesとHoughLinesPはpythonで望ましい結果を出していないので、pythonでLSDをテストしたいのですが、どこにも行きません。
私は次のことを試みました:
LSD=cv2.createLineSegmentDetector(0) lines_std=LSD.detect(mixChl) LSD.drawSegments(mask,lines_std)
ただし、マスクに線を引くと、次のエラーが発生します。LSD.drawSegments(mask、lines_std)TypeError:線は数値タプルではありません
誰かがこれを手伝ってくれませんか?前もって感謝します。
次のようなcv2.drawSegments関数を使用できます。
#Read gray image
img = cv2.imread("test.png",0)
#Create default parametrization LSD
lsd = cv2.createLineSegmentDetector(0)
#Detect lines in the image
lines = lsd.detect(img)[0] #Position 0 of the returned Tuple are the detected lines
#Draw detected lines in the image
drawn_img = lsd.drawSegments(img,lines)
#Show image
cv2.imshow("LSD",drawn_img )
cv2.waitKey(0)
OpenCV ドキュメント を確認できます。
OpenCV3.2.0で次のように線を引くことができました。
lsd = cv2.createLineSegmentDetector(0)
dlines = lsd.detect(gray_image)
for dline in dlines[0]:
x0 = int(round(dline[0][0]))
y0 = int(round(dline[0][1]))
x1 = int(round(dline[0][2]))
y1 = int(round(dline[0][3]))
cv2.line(mask, (x0, y0), (x1,y1), 255, 1, cv2.LINE_AA)
余分な[0]間接参照がすべてある理由はわかりませんが、それが座標を抽出するために必要なことのようです。
OpenCVの返品を開梱するとき、コンソールに印刷するだけで便利だと思いました。この場合、私はしました
print(dlines)
ネストされたすべての角かっこから、すべての理由と理由についてあまり心配することなく、解決策を見つけることができます。
私は以前、著者のソースからコンパイルしてctypesで呼び出したWindows DLLバージョンのLSDを使用していました。
線を引くだけであれば、受け入れられた答えは問題なく機能します。ただし、線とその描画をより細かく制御したい場合は、線をループして、提案されているように個別に処理することができます。よりクリーンなバージョンは次のようになります。
mask = np.zeros((img.shape),np.uint8)
lsd = cv2.createLineSegmentDetector(0)
lines = lsd.detect(img)[0]
for l in lines:
x0, y0, x1, y1 = l.flatten()
//do whatever and plot using:
cv2.line(mask, (x0, y0), (x1,y1), 255, 1, cv2.LINE_AA)