视频分解图片
视频的像素数据解码过程中存在一个帧率的问题。
帧率是指在解码过程中每秒中显示的图片数量,根据人眼的残影效果以及视觉暂留,
一般在15帧以上才会展示出连贯的动画效果。高清1080P的电影一般为24帧。
源代码如下:
# 1 load 2 info 3 parse 4 imshow imwrite
import cv2
cap = cv2.VideoCapture("3.mp4")# 获取一个视频打开cap 1 file name
isOpened = cap.isOpened# 判断是否打开‘
print(isOpened)
fps = cap.get(cv2.CAP_PROP_FPS)#帧率
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))#w h
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(fps,width,height)
i = 0
while(isOpened):
if i == 10:
break
else:
i = i+1
(flag,frame) = cap.read()# 读取每一张 flag frame
fileName = 'image'+str(i)+'.jpg'
print(fileName)
if flag == True:
cv2.imwrite(fileName,frame,[cv2.IMWRITE_JPEG_QUALITY,100])
print('end!')
这里程序的原理:
1.cap(抓取)一个视频输入文件
2.isOpened判断视频是否打开
3.抓取帧率和像素信息(高度和宽度)并输出
4.cap.read抓取每张图片信息然后保存在元组(flag,frame)中
5.cv2.imwrite 修改图片的质量(图片质量函数0—100)
运行结果如图所示:
可以看出第一个打印结果是帧率:29.26(小米6手机拍摄的帧率)手机一般都在30帧左右。
第二个打印结果是图像像素:1920*1080
第三个是打印的图像文件名:图像1到10(后面设置为60效果更好)
第四个打印的是:end
抓取的图片:
image1.jpg
image2.jpg
。
。
。(这个照片我还不会排版就不一一展示了)
image10.jpg
抓取10张的效果不明显因为前10张照片是前0.3s内拍摄的所以变化不大。
我继续抓取60张也就是两秒内的效果如图所示
image15.jpg
image30.jpg
image60.jpg
抓取结果还是很明显的。。。