cv2.error: OpenCV(4.2.0) matrix.cpp:235: error: (-215:Assertion failed) s >= 0 in function 'cv::set

def recognize_camera():                                                         
    cap = cv2.VideoCapture(0)  # 调用0号摄像头                                        
    while True:                                                                 
        ret, test_image = cap.read()                                            
        if ret:                                                                 
            try:                                                                
                # 执行预测                                                          
                predicted_img, predicted_label = get_predict(test_image)        
                # 显示图像                                                          
                cv2.imshow('Recognizing', predicted_img)                        
                # q键退出                                                          
                if cv2.waitKey(100) & 0xFF == ord('q'):                         
                    break                                                       
            except:                                                             
                cv2.imshow('Missing', test_image)                               
                                                                                
    cap.release()                                                               
    cv2.destroyAllWindows()                                                     

报错:

cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\core\src\matrix.cpp:235: error: (-215:Assertion failed) s >= 0 in function 'cv::setSize'

这个问题纠结了我好久好久,

首先路径中不要有中文,其次路径中使用 /,不要使用 \\ 去转义!

都改成这种就可以!

test_path = 'D:/DL_Projects/FinalDesign/FinalDesign/App/face_detect/test_data'

 

--------------------------------------------------------

上面的不行,找到新的解决方法了!

这个地方出现的问题我认为是最终问题并不是我的识别代码部分有问题,而是摄像头读入的图像存在问题,之前报错的时候出现

cv2.error: OpenCV(4.2.0) matrix.cpp:235: error: (-215:Assertion failed) s >= 0 in function 'cv::set_第1张图片

cv2.error: OpenCV(4.2.0) matrix.cpp:235: error: (-215:Assertion failed) s >= 0 in function 'cv::set_第2张图片

可以发现摄像头读入的图像是数据全为0,是空的。

那么,我们可以推断是摄像头读入的问题

解决方法:

我们利用try-except,规避掉读入图片存在问题的报错,通过except进行调整,这样就解决了这个问题。

def recognize_camera():                                                              
    cap = cv2.VideoCapture(0)  # 调用0号摄像头                                             
    while True:                                                                      
        ret, test_image = cap.read()                                                 
        if ret:                                                                      
            try:                                                                     
                # 执行预测                                                               
                predicted_img, predicted_label = get_predict(test_image)             
                # 显示图像                                                               
                cv2.imshow('Recognizing', predicted_img)                             
                # q键退出                                                               
                if cv2.waitKey(100) & 0xFF == ord('q'):                              
                    break                                                            
            except:                                                                  
                cv2.imshow('Missing', test_image)                                    
                                                                                     
    cap.release()                                                                    
    cv2.destroyAllWindows()                                                          

这里except下面可以使用用我这种产生对比,也可以什么都不做,摄像头前面晃两下等到读入重新有效。

 

终于解决了!!!

 

你可能感兴趣的:(毕设)