视频分解为图片

视频分解图片

视频的像素数据解码过程中存在一个帧率的问题。

帧率是指在解码过程中每秒中显示的图片数量,根据人眼的残影效果以及视觉暂留,

一般在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

 

 

抓取结果还是很明显的。。。

 

posted @ 2019-06-04 09:50  量子与太极  阅读(806)  评论(0编辑  收藏  举报