2016-12-15 8 views
-7

これは、OpenCVでのPythonを使ったハフ変換のコードです。 forループの内容を理解できません。誰かがforループの仕組みを説明できますか?私たちはあなたのコードを適用した場合forループ文は理解できません。誰かが私にこれを説明することはできますか?

enter image description here

は、我々はこのような何かを得るでしょう:

import cv2 
import numpy as np 

img = cv2.imread('dave.jpg') 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
edges = cv2.Canny(gray,50,150,apertureSize = 3) 

lines = cv2.HoughLines(edges,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(img,(x1,y1),(x2,y2),(0,0,255),2) 

cv2.imwrite('houghlines3.jpg',img) 
+1

正確に理解していない部分はありますか? –

+0

あなたは 'lines'が何を持っているか知りたいですか? –

+0

いくつかの基本的な例でループを学習する必要があります。ループ本体のため、このループは初心者にとっては理解できません。 – Aleksandar

答えて

0

のは、単純なグリッドを考えるあなたは、見ることができるように

enter image description here

forループは、linesの最初の要素のみを使用しています...しかし、私たちがわずかにあなたのアルゴリズムをより一般的なものに微調整すればすべての一致をループにフォーム:あなたはすべての行が検出される方法を見ていき

import cv2 
import numpy as np 

img = cv2.imread('grid.jpg') 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
edges = cv2.Canny(gray,50,150,apertureSize = 3) 

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

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

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

:いずれの場合で

enter image description here

を、私はあなたが最初の公式docsを経ることをお勧めしたいですシンプルな形状でテストを開始することで、アルゴリズムの仕組みを真に把握することができます。

+0

の行を描画します。私はこれを理解しました。しかし、私はラインが見つかった数学を理解していません(これはrhoとthetaを与えるforループの内側にあります)。 – krtk

-1

私はこれが役に立ちそうです。私はそれがどこから来たのかはっきりしないことに同意する。私は画像の対角を1000値の代わりに選ぶべきだと思います。

+0

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](/レビュー/低品質の投稿/ 17662763) – XenoRo

関連する問題