1

Thank you for looking into this, I have a python script for lane detection using cv2, it seems a cv2 function is causing the following error.

cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-r2ue8w6k\opencv\modules\imgproc\src\drawing.cpp:2395: error: (-215:Assertion failed) p.checkVector(2, CV_32S) >= 0 in function 'cv::fillPoly'

when I run the below code

import cv2
import numpy as np
import matplotlib.pyplot as plt
from numpy.lib.twodim_base import tri

image = cv2.imread('Lane1-a.jpg')

class ImageProcess:
    image_height =0
    image_width = 0

    def __init__(self,image):
        self.image_height =  image.shape[0]
        self.image_width = image.shape[1]
    
    def Preprocess(self,image):
        copy = self.GetCopy(image)
        gray = self.GetGrayScale(copy)
        blur = cv2.GaussianBlur(gray,(5,5),0)
        edgify = cv2.Canny(blur,50,150)
        return edgify

    def GetCopy(self,image):
        return np.copy(image) # do not use lane_image = image ( this does not create a copy but modifies origanl array)

    def GetGrayScale(self,image):
        return cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)

    def ShowImage(self,image):
        plt.imshow(image)
        plt.show()

    def ReigonOfIntrest(self,image):
        traingle = np.array([(200,self.image_height),(1000,self.image_height),(550,400)])
        mask = np.zeros_like(image)
        cv2.fillPoly(mask,traingle,255)
        return mask

p = ImageProcess(image)
mask = p.ReigonOfIntrest(p.Preprocess(image))
p.ShowImage(mask)

I tried This answer here, but it did not help, please can you look into it.

Pawan Nirpal
  • 565
  • 1
  • 12
  • 29
  • Does this answer your question? [What does the python interface to opencv2.fillPoly want as input?](https://stackoverflow.com/questions/11270250/what-does-the-python-interface-to-opencv2-fillpoly-want-as-input) – HansHirse Feb 01 '21 at 08:21
  • @HansHirse No it doesn't, I tried the suggested fixes and it did not work – Pawan Nirpal Feb 01 '21 at 08:46
  • 1
    Incorporating the solution(s) provided in the linked Q&A, you just need to add another pair of `[ ]` around your points, i.e. `traingle = np.array([[(200, self.image_height), (1000, self.image_height), (550, 400)]])`. That's it, works for me. – HansHirse Feb 01 '21 at 10:20

0 Answers0