- 安装opencv
pip install opencv-python
- 视频分解图片
import cv2
import numpy as np
import os
os.chdir('F:/opencv/test')
##读取视频,并逐帧分解成图片
cap = cv2.VideoCapture('1.mp4') #打开一个视频
isOpened = cap.isOpened() #判断是否打开
print(isOpened)
#获取视频的相关信息,视频的每一帧图片的宽度都是一致的
fps = cap.get(cv2.CAP_PROP_FPS) #帧率,即每秒钟由多少张图片组成
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #获取宽度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #获取高度
print(fps,width,height) #输出相关信息
i = 0
while (isOpened):
#读取视频的前两秒的图像,共计2*int(fps)张
if i ==int(fps)*2 :
break
else:
i = i+1
(flag,frame) = cap.read() #读取每一张 flag frame
filename = 'image'+str(i)+'.jpg'
#将读取的图片写入文件中,
if flag == True:
cv2.imwrite(filename,frame,[cv2.IMWRITE_JPEG_QUALITY,100]) #确定图片质量,100算是高的
print('end!')
- 图片合成视频
##读取零散图片(上面分解的图片),并将其合成视频
img = cv2.imread('image1.jpg')
imginfo = img.shape
size = (imginfo[1],imginfo[0]) #与默认不同,opencv使用 height在前,width在后,所有需要自己重新排序
print(size)
#创建写入对象,包括 新建视频名称,每秒钟多少帧图片(10张) ,size大小
#一般人眼最低分辨率为19帧/秒
videoWrite = cv2.VideoWriter('2.mp4',-1,10,size)
for i in range(1,40):
filename = 'image'+str(i)+'.jpg'
img = cv2.imread(filename,1) #1 表示彩图,0表示灰度图
#直接写入图片对应的数据
videoWrite.write(img)
videoWrite.release() #关闭写入对象
print('end')
上述的离散再合成,会丢失视频的声音信息。
需要:
- 通道顺序
opencv读取的彩图的三个通道的顺序为:gbr ,与常规的rgb顺序相反。 - 宽度 高度顺序
一般 width,在height之前。但是 cv2读取进行的图片的Info中,先是 height,后是 width。这个需要注意。