2016-04-29 9 views
0

すべての機能をHoughLinesを使用しますが、実行する例を再現することはできません:それはtutorialであるようは私に期待される結果が得られていない、このコードをOpenCVのが正常に動作からPython用のOpenCVから

dave = cv2.imread('dave.png') 
dave1 = cv2.cvtColor(dave,cv2.COLOR_BGR2GRAY) 
dave2 = cv2.Canny(dave1,50,150,apertureSize = 3) 
dave3 = dave2.copy() 

lines = cv2.HoughLines(dave2,1,np.pi/180,200) 
for rho,theta in lines[0]: 
    a = np.cos(theta) 
    b = np.sin(theta) 
    x0 = a*rho 
    y0 = b*rho 
    x1 = int(x0 + 1000*(-b)) 
    y1 = int(y0 + 1000*(a)) 
    x2 = int(x0 - 1000*(-b)) 
    y2 = int(y0 - 1000*(a)) 

    cv2.line(dave3,(x1,y1),(x2,y2),(100,100,100),20) 

cv2.imshow('image',dave3) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

コードがほとんどです

オリジナル画像:

enter image description here

マイ結果:

enter image description here

答えて

1

問題は、dave3がグレーレベルの画像であり、カラー画像を表示することです。グレーレベルの画像dave3に色付きの線を書き込もうとしていますが、これは理にかなっていません。

代わりに、色付きイメージのdaveに行を書き込もうとします。

そして、cv.lineの字下げがありませんでした。さらに、元のチュートリアルと同様に、そのコマンドの線幅を20から2に減らしました。

すべての行を描画するために、行内をループすることができます。

あなたが探しているコードは、おそらく次のようになります。

import cv2 
import numpy as np 

dave = cv2.imread('dave.jpg') 
dave1 = cv2.cvtColor(dave,cv2.COLOR_BGR2GRAY) 
dave2 = cv2.Canny(dave1,50,150,apertureSize = 3) 

lines = cv2.HoughLines(dave2,1,np.pi/180,200) 
for line in lines: 
    for rho,theta in line: 
     a = np.cos(theta) 
     b = np.sin(theta) 
     x0 = a*rho 
     y0 = b*rho 
     x1 = int(x0 + 1000*(-b)) 
     y1 = int(y0 + 1000*(a)) 
     x2 = int(x0 - 1000*(-b)) 
     y2 = int(y0 - 1000*(a)) 

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

cv2.imshow('image',dave) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 
+0

私は私のポストで、元の画像が含まれています。あなたのコードでは、私は再び1行しかありません。 –

+0

私は線をプロットするだけでなく、すべての線をループするようにコードを修正しました[0]。あなたのチュートリアルではこれが間違っています。ソースは線[0]をプロットし、結果はすべての線を示しています。 – tfv

+0

それは動作しません!ありがとう。 すべてのチュートリアルとポストここで私はこの 'lines [0]'を見て、それは私を混乱させました。 –