问题解决:OpenCV将捕获的视频保存,却无法播放,报解析错误

 首先明确这个问题很常见,最终生成的视频一般10KB以内,双击打卡就会报格式错误,解析错误等,其实就以下这几个点,不注意就会造成格式不正确。
  1. 解码格式与保存的文件格式要相匹配

在Fedora中:DIVX,XVID,MJPG,X264,WMV1,WMV2。(最好使用XVID。MJPG会生
成大尺寸的视频。X264会生成非常小的尺寸的视频)
在Windows中:DIVX(尚待测试和添加)
在OSX中:MJPG(.mp4),DIVX(.avi),X264(.mkv)

DIVX, MJPG,不知道具体用什么解码,就都试一试

fourcc = cv2.VideoWriter_fourcc(*'XVID')
  1. 输出视频的窗口大小,要和图片大小相匹配

比如说我的图片是240*210的,我设置的输出视频窗口大小为210*240
窗口大小要进行宽高反写,不能用行列数的形式来表示

out = cv2.VideoWriter('output.avi', fourcc, 20.0, (210,240))
  1. 如果灰度图片要特殊处理,加入参数0或false

cv.VideoWriter()函数默认保存为RGB格式的彩色视频,要保存为灰度视频应在最后添加False或0

out = cv2.VideoWriter('output.avi', fourcc, 20.0, (210,240))
  1. 如果想要保存MP4格式的视频,就写成output.mp4v,写成.mp4也可以不影响播放,就是会保错
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('output.mp4v', fourcc, 20.0, (210,240),0)

demo:保存灰度图像的视频

""" 从视频读取帧保存为图片"""
import cv2
import numpy as np
# cap = cv2.VideoCapture("C:/Users/lenovo/Videos/1.mp4")#读取文件
cap = cv2.VideoCapture(0)#读取摄像头

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.mp4v', fourcc, 20.0, (210,240),0)

while(True):
    ret, frame = cap.read()
    #下面三行可以根据自己的电脑进行调节
    src = cv2.resize(frame,(width,height), interpolation=cv2.INTER_CUBIC)#窗口大小
    cv2.rectangle(src, (90, 60), (300, 300 ), (0, 255, 0))#框出截取位置
    roi = src[60:300 , 90:300]  # 获取手势框图
    print(roi.shape)

    gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)#转化为灰度图片
    out.write(gray)
    cv2.imshow("2",gray)

    key = cv2.waitKey(50) & 0xFF
    if key == ord('q'):
            break
            
cap.release()
out.release()
cv2.destroyAllWindows()

你可能感兴趣的:(金蛋错误,opencv,图像处理,python)