'NoneType' object is not iterable

Hello!
I’m relatively new to the OpenCV library, but I have a good amount of programming experience with Python. I’m running the example code from this website here, trying to use the Hough Line Transform:

https://docs.opencv.org/master/d6/d10/tutorial_py_houghlines.html

and changed the directory for the example image to my own photo, and I have made sure that it is the right path. However, when I run the code, I get an error:

File houghes_transform.py, line 9, in
for line in lines:
TypeError: ‘NoneType’ object is not iterable

I know that typically, this ‘NoneType’ error involves an invalid image path or a problem reading the picture, but I don’t think it’s either one of those. If anyone has an idea as to what this means, I would greatly appreciate it.

Thanks!

1 Like

Hi,
Nice catch
Yes there is a problem in sample. You can post an issue and make a PR. Code should be

import cv2 as cv
import numpy as np
img = cv.imread(cv.samples.findFile('sudoku.png'))
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
edges = cv.Canny(gray,50,150,apertureSize = 3)
lines = cv.HoughLines(edges,1,np.pi/180,200)
lines = cv.HoughLines(edges,1,np.pi/180,200)
if lines is not None:
    for line in lines:
        rho,theta = line[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))
        cv.line(img,(x1,y1),(x2,y2),(0,0,255),2)
    cv.imwrite('houghlines3.jpg',img)
else:
   print("No line detected in image")
1 Like