2015-07-11 7 views
0
import cv2 
import numpy as np 
import matplotlib.pyplot as plt 
def CannyThreshold(lowThreshold): 
      lowThreshold = cv2.getTrackbarPos('Min threshold','canny demo') 
      detected_edges = cv2.medianBlur(gray,5) 
      detected_edges=cv2.Canny(detected_edges,lowThreshold,lowThreshold*ratio,apertureSize = kernel_size) 
lines = cv2.HoughLines(detected_edges,1,np.pi/180,190) 
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)) 
    #print 'rho=',rho,' theta=',theta 
    cv2.line(frame,(x1,y1),(x2,y2),(0,0,255),2) 

cv2.imshow('canny demo',detected_edges) 
cv2.imshow('original',frame) 

lowThreshold = 23 
max_lowThreshold = 50 
ratio = 3 
kernel_size = 3 
cap = cv2.VideoCapture(0) 
cv2.namedWindow('canny demo') 
cv2.createTrackbar('Min threshold','canny demo',lowThreshold,max_lowThreshold, CannyThreshold) 

while(1): 
    ret, frame = cap.read() 
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) 
    CannyThreshold(lowThreshold) # initialization 
if cv2.waitKey(1) == 27: 
    cap.release() 
    cv2.destroyAllWindows() 

выше мой код, чтобы обнаружить края, а затем рисовать линии над ним в оригинальной рамкеPython TypeError: объект «NoneType» не имеет атрибута «__getitem__» при обработке изображений

ошибки я получаю даются ниже :

Traceback (most recent call last): 
    File "D:\python_program\hough transform\canny_camera.py", line 37, in <module> 
    CannyThreshold(lowThreshold) # initialization 
    File "D:\python_program\hough transform\canny_camera.py", line 11, in CannyThreshold 
    for rho,theta in lines[0]: 
TypeError: 'NoneType' object has no attribute '__getitem__' 
+0

Что-то не назначается должным образом к тому времени, йо При вызове функции 'CannyThreshold' она пытается получить атрибут' __getitem__' из непризнанной переменной типа «Нет». – Leb

+0

В этом примере: https://github.com/Itseez/opencv/blob/master/samples/python2/houghlines.py пустой массив передается как 5-й параметр. Документы не говорят, что это необходимо, но, учитывая прототип C++, я бы не удивился. –

+0

Возможно, вы также должны упомянуть о том, что используете OpenCV. Этот факт отсутствует в вашем заявлении о проблеме, и вы также не отметили OpenCV в своем вопросе (я просто это сделал). «HoughLines» имеет потенциал возврата «Нет», что означает, что на вашем изображении не было обнаружено никаких линий. Ответ, приведенный ниже, по существу описывает этот факт. – rayryeng

ответ

0
lines = cv2.HoughLines(detected_edges,1,np.pi/180,190) 

Эти линии не может быть None, то строки [0] приводит к ошибке

+0

Да, я пробовал проблему с помощью try и except. строка массива не возвращает ни одного типа. –