首页 > 解决方案 > OverflowError: Python int too large to convert to C long in lane line detection

问题描述

    def make_coordinates(image,line_parameters):
        try:
            slope, intercept = line_parameters
        except TypeError:
            slope, intercept = 0,0
        y1=image.shape[0]
        y2=np.int(y1*(3/5))
        x1=np.int((y1-intercept)/slope)
        x2=np.int((y2-intercept)/slope)
        return np.array([x1,y1,x2,y2])
    
    
    def average_slope_intercept(image, lines):
        left_fit=[]
        right_fit=[]
        for line in lines:
            x1,y1,x2,y2 = line.reshape(4)
            parameters = np.polyfit((x1,x2),(y1,y2),1)
            slope=parameters[0]
            intercept=parameters[1]
            if(slope<0):
                left_fit.append((slope,intercept))
            else:
                right_fit.append((slope,intercept))
        left_fit_average=np.average(left_fit,axis=0)
        right_fit_average=np.average(right_fit,axis=0)
        left_line=make_coordinates(image,left_fit_average)
        right_line=make_coordinates(image,right_fit_average)
        return np.array([left_line,right_line])
    
    def canny(lane_image):
        gray = cv2.cvtColor(lane_image, cv2.COLOR_RGB2GRAY)
        blur = cv2.GaussianBlur(gray, (5,5),0)
        canny = cv2.Canny(blur, 50,150)
        return canny
    
    def region_of_intrest(canny):
        height = canny.shape[0]
        polygon = np.array([[(200, height), (1100, height),(550, 250)]])
        mask=np.zeros_like(canny)
        cv2.fillPoly(mask, polygon, 255)
        masked_image=cv2.bitwise_and(canny,mask)
        return masked_image
    
    def display_lines(image, lines):
        line_image=np.zeros_like(image)
        if(lines is not None):
            for line in lines:
                x1,y1,x2,y2 = line.reshape(4)
                cv2.line(line_image, (x1,y1),(x2,y2),(255,0,0),10)
        return line_image
    
    while True:
        frame = grab_screen(region=(0,40,800,600))
        canny_image=canny(frame)
        cropped_image=region_of_intrest(canny_image)
        lines = cv2.HoughLinesP(cropped_image, 2, np.pi/180, 100, np.array([]),minLineLength=40,maxLineGap=5)
        average_lines = average_slope_intercept(frame,lines)
        line_image=display_lines(frame,average_lines)
        combo_image = cv2.addWeighted(frame,0.8,line_image,1, 1)
        cv2.imshow('result',combo_image)
        cv2.waitKey(1)`

我收到 OverflowError: Python int too large to convert to C long. 请有人帮我

标签: python

解决方案


推荐阅读