通过openCV将视频转换成帧

Converting video into frames by 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,-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, frame = cap.read()

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

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


cv2.destroyAllWindows()
cap.release()