0
votes

I was working with opencv using haarcascade face detection . But this error is creeping and i am not able to get this. So please guide me.

OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

import cv2
def videoCam():
    cap=cv2.VideoCapture(0)
    face_cascade=cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")
    while (True):
        ret,frame=cap.read()
        gray_frame=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        if (ret==False):
            continue
        faces=face_cascade.detectMultiScale(gray_frame,1.3,5)
        for(x,y,w,h) in faces:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
        cv2.imshow("Video Frame",frame)
        key_pressed=cv2.waitKey(1) & 0xff
        if(key_pressed==ord('q')):
            break

    cap.release()
    cv2.destroyAllWindows()
videoCam()
1

1 Answers

0
votes

You are getting above error because frame is None in cv2.cvtColor function. Please, verify input to the cv2.VideoCapture function. It's a device index which is just the number to specify which camera. You haven't mentioned above which camera you are using, i.e., internal or external camera. Read about what device index to use from here. You can check if the VideoCapture() method already initializes your camera object using print(cap.isOpened()) after cv2.VideoCapture function. It will return True in case it successfully initialized your camera object.

And, why are doing

if (ret==False):
    continue

after cv2.cvtColor. The main aim of this is to check if the frame is read correctly or not. If the image is read correctly, ret will be True, else False. So, you should check this before using cv2.cvtColor function and if it returns False, then you should break from the loop, instead of using continue, otherwise the while loop will keep on running infinitely.