I am trying to run lane detection using hough transform on pythonand
I keep getting the follow error:
Can't parse 'pt1'. Sequence item with index 0 has a wrong typeon line 47 ,
corresponding to this line:
cv2.line(line_image, (int(x1), int(y1)), (int(x2), int(y2)), (255, 0, 0), 10)
I am also getting this error:
TypeError: cannot unpack non-iterable numpy.float64 objectline 6, in make_points slope, intercept = line ^^^^^^^^^^^^^^^^
Video format is 720x1280 (720p)
This is the entire code
import cv2import numpy as npimport matplotlib.pyplot as pltdef make_points(image, line): slope, intercept = line y1 = int(image.shape[0])# bottom of the image y2 = int(y1*3/5) # slightly lower than the middle x1 = int((y1 - intercept)/slope) x2 = int((y2 - intercept)/slope) return [[x1, y1, x2, y2]]def average_slope_intercept(image, lines): left_fit = [] right_fit = [] if lines is None: return None for line in lines: for x1, y1, x2, y2 in line: fit = np.polyfit((x1,x2), (y1,y2), 1) slope = fit[0] intercept = fit[1] if slope < 0: # y is reversed in image left_fit.append((slope, intercept)) else: right_fit.append((slope, intercept)) # add more weight to longer lines left_fit_average = np.average(left_fit, axis=0) right_fit_average = np.average(right_fit, axis=0) left_line = make_points(image, left_fit_average) right_line = make_points(image, right_fit_average) averaged_lines = [left_line, right_line] return averaged_linesdef canny(img): gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) kernel = 5 blur = cv2.GaussianBlur(gray,(kernel, kernel),0) canny = cv2.Canny(gray, 50, 150) return cannydef display_lines(img,lines): line_image = np.zeros_like(img) if lines is not None: for line in lines: for x1, y1, x2, y2 in line: cv2.line(line_image, (int(x1), int(y1)), (int(x2), int(y2)), (255, 0, 0), 10) return line_imagedef region_of_interest(canny): height = canny.shape[0] width = canny.shape[1] mask = np.zeros_like(canny) triangle = np.array([[ (200, height), (800, 350), (1200, height),]], np.int32) cv2.fillPoly(mask, triangle, 255) masked_image = cv2.bitwise_and(canny, mask) return masked_imagecap = cv2.VideoCapture("Video_City.mp4")while(cap.isOpened()): _, frame = cap.read() canny_image = canny(frame) cropped_canny = region_of_interest(canny_image) lines = cv2.HoughLinesP(cropped_canny, 2, np.pi/180, 100, np.array([]), minLineLength=40,maxLineGap=5) averaged_lines = average_slope_intercept(frame, lines) line_image = display_lines(frame, averaged_lines) combo_image = cv2.addWeighted(frame, 0.8, line_image, 1, 1) cv2.imshow("result", combo_image) if cv2.waitKey(1) & 0xFF == ord('q'): breakcap.release()cv2.destroyAllWindows()
any idea how to fix this? I tried the algorithm on an image and it works just fine. I am not getting any video output.