首页 > 解决方案 > _src.empty() 在函数'cv::cvtColor

问题描述

除了我不断收到此错误外,此代码没有任何问题。

rgb_frame =cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-2b5g8ysb\opencv\modules\imgproc\src\color.cpp:182: 
error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'  

我用谷歌搜索了这个错误,他们告诉我检查框架是否保存完好。我检查了一下,它做得很好。他们还告诉我检查路径'video3.mp4'。我将视频保存在与此 python 文件相同的文件夹中。

谁能告诉我为什么我不断收到这个错误?

import cv2
import openpyxl


cap = cv2.VideoCapture('video3.mp4')    


wb= openpyxl.Workbook()
sheet= wb.active

a=1
b=1


while(1):

     _, frame = cap.read()
    frame_pos=cap.get(cv2.CAP_PROP_POS_FRAMES)

    #error here!
    rgb_frame =cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
    hsv_frame01=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
    
    

    ycrb_frame=cv2.cvtColor(frame,cv2.COLOR_BGR2YCrCb)
    planes=cv2.split(ycrb_frame)
    planes[0]=cv2.equalizeHist(planes[0])
    dst_ycrb=cv2.merge(planes)


    dst=cv2.cvtColor(dst_ycrb,cv2.COLOR_YCrCb2BGR)
    hsv_frame = cv2.cvtColor(dst, cv2.COLOR_BGR2HSV)



    lower_hsv = cv2.inRange(hsv_frame, (30, 150, 50), (255, 255, 180))
    upper_hsv = cv2.inRange(hsv_frame, (0, 70,100), (10, 255, 255))   
    added_hsv = cv2.addWeighted(lower_hsv, 1.0, upper_hsv, 1.0, 0.0)


    se=cv2.getStructuringElement(cv2.MORPH_RECT,(5,3))   

    bi=cv2.medianBlur(added_hsv,3)
    dilate=cv2.dilate(bi,se,iterations=6)



    res = cv2.bitwise_and(frame, frame, mask=dilate)


    contours, _ = cv2.findContours(dilate,cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 


    for i in contours:
        M=cv2.moments(i)     
    
    
        cy=int(M['m01']/M['m00'])
        cx=int(M['m10']/M['m00'])
       
        cv2.drawContours(res,[i],0,(255,0,0),3)
        cv2.circle(res,(cx,cy),3,(255,0,0),-1)
   
    
        if frame_pos>=285 and cy<320:
            text1='RGB : ' + str(rgb_frame[cy,cx])
            text2='HSV : ' + str(hsv_frame01[cy,cx])
            cv2.putText(res,text1,(cx-200 ,cy),cv2.FONT_HERSHEY_PLAIN,1 ,(255,255,255))
            cv2.putText(res,text2,(cx-200 ,cy-30),cv2.FONT_HERSHEY_PLAIN,1 ,(255,255,255))
            if cx<=427:
                sheet.cell(row=a,column=1).value=str(rgb_frame[cy,cx])
                a=a+1
           
                   
            else:
                sheet.cell(row=b,column=2).value=str(rgb_frame[cy,cx])
                b=b+1
           
 
        elif 350<= cy <=400 :    
            text1='RGB : ' + str(rgb_frame[cy,cx])
            text2='HSV : ' + str(hsv_frame01[cy,cx])
        
            cv2.putText(res,text1,(cx-200 ,cy),cv2.FONT_HERSHEY_PLAIN,1 ,(255,255,255))
            cv2.putText(res,text2,(cx-200 ,cy-30),cv2.FONT_HERSHEY_PLAIN,1 ,(255,255,255))

            if cx<=427:
                sheet.cell(row=a,column=1).value=str(rgb_frame[cy,cx])
                a=a+1
            else:
                sheet.cell(row=b,column=2).value=str(rgb_frame[cy,cx])
                b=b+1 
       
    
    wb.save('1.xlsx')
    cv2.namedWindow('frame',cv2.WINDOW_NORMAL)
    cv2.namedWindow('added_hsv',cv2.WINDOW_NORMAL)
    cv2.namedWindow('res',cv2.WINDOW_NORMAL)


    cv2.imshow('frame',frame)
    cv2.imshow('added_hsv',added_hsv)
    cv2.imshow('res',res)

    if cv2.waitKey(5)>0:
        break   

cv2.destroyAllWindows() 

标签: pythonopencvopencv-python

解决方案


推荐阅读