2017-07-05 4 views
0

私のコードは、行[0]とするためにNoneTypeのエラーを取得し、このように見えますが、なぜ、正確にそのなしタイプを見つけることができません。:ハフ変換を使用した長方形の検出。このエラーが発生しました:「NoneType」オブジェクトが属性を持っていない「__getitem__」

import numpy as np 
import cv2 

image=cv2.imread('img.jpg',0) 
edges = cv2.Canny(img,50,150,apertureSize = 3) 
lines = cv2.HoughLines(edges,1,np.pi/180,200) 
for rho,theta in lines[0]: # Error was said to be in this 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(img,(x1,y1),(x2,y2),(0,0,255),1) 
cv2.imshow('image',image) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

答えて

0

それを線が検出されなかった可能性があります。 cv2.Cannyの結果をcv2.imshowを使って調べて、まっすぐなエッジがあるかどうか確認してください。 HoughLinesのしきい値パラメータを減らして、より多くの行を検出できるようにすることができます。

編集:送信した画像でコードをテストしました。 Cannyによって検出されたエッジは通常連続していないため、HoughLines(200)のしきい値は高すぎます。画像のみ200ピクセル高いことを考えると、私はこれにより、編集後のサンプル・コードを見つける50及び100

の間の値をお勧めします。

import numpy as np 
import cv2 

image=cv2.imread('/home/foo/Downloads/image_barcode.jpg',0) 
edges = cv2.Canny(image,50,150,apertureSize = 3) 
lines = cv2.HoughLines(edges,1,np.pi/180,70) # used to be 200 
for rho,theta in lines[0]: # displays only the first 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(image,(x1,y1),(x2,y2),(255,0,255),1) 
cv2.imshow('image',image) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 
+0

をhttps://drive.google.com/file/d/0ByN-oisJmRd2amx0MUgzRUZOdW8/view?usp = sharing 遅く返事を申し訳ありません。 –

関連する問題