通过openCV将视频转换为帧

问题描述

将视频转换为帧时,确实进行了转换,但显示错误

4     while success:
     35         success,frame = cap.read()
---> 36         grayFrame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
     37         if(success==False and frame==None):
     38             pass

error: OpenCV(3.4.2) c:\miniconda3\conda-bld\opencv suite_1534379934306\work\modules\imgproc\src\color.hpp:253: error: (-215:Assertion Failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'cv::CvtHelper<struct cv::Set<3,4,-1>,struct cv::Set<1,-1,struct cv::Set<0,2,5>,2>::CvtHelper'

解决方法

请检查相机或视频是否已打开,而不是两次使用success变量:

while cap.isOpened():

然后获取read输出。

ret,frame = cap.read()

如果成功返回框架,请将其写入文件夹:

if ret:
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    cv2.imwrite("output_frames/gray.png",gray)

由于您将拥有多个帧,因此可以使用计数器保存每个帧。

count = 0

while cap.isOpened():
    ret,frame = cap.read()

    if ret:
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        cv2.imwrite("output_frames/gray_{}.png".format(count),gray)
        count += 1

完整代码:

import cv2

cap = cv2.VideoCapture("video.mp4")

count = 0

while cap.isOpened():
    ret,gray)
        cv2.imshow("output",gray)
        count += 1

    if (cv2.waitKey(1) & 0xFF) == ord('q'):
        break


cv2.destroyAllWindows()
cap.release()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...