zoukankan      html  css  js  c++  java
  • 视频分解为图片

    视频分解图片

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

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

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

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

  • 相关阅读:
    Chapter6 Commodity Forwards
    Chapter5 Prepaid Forwards
    个人作业5——软工个人总结
    软工网络15个人作业3
    软工网络15——结对编程
    软工网络15个人阅读作业2
    软工网络15个人阅读作业1 201521123080曾飞远
    Java课程设计 猜数游戏个人博客
    201521123080《Java程序设计》第14周学习总结
    201521123080《Java程序设计》第13周学习总结
  • 原文地址:https://www.cnblogs.com/Jack-Elvis/p/10971786.html
Copyright © 2011-2022 走看看