最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)圖片和視頻的相互轉(zhuǎn)換

 更新時(shí)間:2021年12月18日 09:24:30   作者:小小凡sir  
有時(shí)候我們需要把很多的圖片合成視頻,或者說自己寫一個(gè)腳本去加快或者放慢視頻;也有時(shí)候需要把視頻裁剪成圖片,進(jìn)行后續(xù)操作。這篇文章就將為大家介紹如何通過Python實(shí)現(xiàn)圖片和視頻的相互轉(zhuǎn)換,需要的可以參考一下

使用背景

有時(shí)候我們需要把很多的圖片合成視頻,或者說自己寫一個(gè)腳本去加快或者放慢視頻;

也有時(shí)候需要把視頻裁剪成圖片,進(jìn)行后續(xù)操作。

這里提供兩種方法,一是視頻轉(zhuǎn)圖像;二是圖像轉(zhuǎn)視頻。?

一、視頻轉(zhuǎn)圖像

有時(shí)候我們需要把文件夾中的視頻按照一定的幀率截取圖片,如一秒取三張,為了實(shí)現(xiàn)這一需求,我特地編寫了代碼實(shí)現(xiàn),并且附上了十分詳細(xì)的說明,為了方便大家改代碼實(shí)現(xiàn)自己需求(主要為了照顧剛學(xué)python的或者只需要用這一需求的小伙伴),本博文的特點(diǎn)如下:

  • 直接改變輸入文件夾和輸出文件夾的位置,就可以實(shí)現(xiàn)功能
  • 輸出的圖片能按照一定格式命名,這里是以20210823_0001命名
  • 逐一遍歷文件夾中視頻,序號之間可以連續(xù)(也可不連續(xù),需要改代碼)
  • 利用雙線性插值方法,就算圖片變大了,也能保證分辨率(關(guān)于雙線性,這里只是調(diào)用opencv方法實(shí)現(xiàn),具體實(shí)現(xiàn)代碼和原理可看我下一篇博文)
  • 代碼解釋十分詳細(xì),一看就懂

十分詳細(xì)代碼實(shí)現(xiàn)

首先先說明需要自己修改的參數(shù),代碼如下:

filepath = 'C:/Users/ZFG/Desktop/1111' #視頻文件夾所在目錄
data='20210823'   #要是儲存的文件為20210823_0001格式,則為前半部分
save_filename='C:/Users/ZFG/Desktop/2222/'  #儲存圖片的文件夾的地址
timeF = 6   #根據(jù)一秒取多少幀設(shè)置,比如我的視頻是24幀/秒,取6則一秒取三張
kernal=(700,700)  #設(shè)置輸出的大小,根據(jù)自己需求設(shè)置

然后再設(shè)置一個(gè)方法,來儲存截取后的圖片:

def saveImage(image,SaveAddress,num):  #image為讀取的圖片,SaveAddress為需要存的地址,num為截取圖片時(shí)候記錄的序號
    address= SaveAddress+data+'_'+str(num).zfill(4)+'.jpg'   #這里設(shè)置輸出格式
    cv2.imwrite(address,image) #這里為存圖片

之后讀取文件夾:

pathDir = os.listdir(filepath)
i=0
j=0
for allDir in pathDir:  #遍歷文件夾中的每一個(gè)視頻
    videopath =filepath+'/'+ allDir
    videoCapture=cv2.VideoCapture(videopath)  #輸入絕對路徑
    untill,picture=videoCapture.read()  #讀取視頻,視頻讀取完的時(shí)候,返回的untill為False,表示視頻讀取完畢
    while untill:
        i+=1
        if (i%timeF==0):    #根據(jù)原視頻的幀率看截圖圖片的頻率
            j+=1
            picture=cv2.resize(picture,kernal,cv2.INTER_LINEAR)  #這里調(diào)用了opencv中的雙線性插值法,要是圖片增加很快,保證了圖片精度
            saveImage(picture,save_filename,j)  #調(diào)用我們之前描述的方法
            pass
        untill, picture = videoCapture.read()  #再次看視頻是否結(jié)束,結(jié)束了則until為False

將上訴代碼結(jié)合后,最終程序如下所示:

import cv2
import os

i = 0
j = 0
pathDir = os.listdir(filepath)
filepath = 'C:/Users/ZFG/Desktop/1111'
data='20210823'
save_filename='C:/Users/ZFG/Desktop/2222/'
timeF = 6
kernal=(700,700)
def saveImage(image,SaveAddress,num):
    address= SaveAddress+data+'_'+str(num).zfill(4)+'.jpg'
    cv2.imwrite(address,image)
for allDir in pathDir:
    videopath =filepath+'/'+ allDir
    videoCapture=cv2.VideoCapture(videopath)
    untill,picture=videoCapture.read()
    while untill:
        i+=1
        if (i%timeF==0):
            j+=1
            picture=cv2.resize(picture,kernal,cv2.INTER_LINEAR)
            saveImage(picture,save_filename,j)
            pass
        untill, picture = videoCapture.read()

最后看下效果吧:

第一張圖是文件夾中的視頻,幀率是24幀/秒,第二張圖是一秒取三張圖片后,圖片儲存在文件夾中的圖。

二、圖像轉(zhuǎn)視頻

有時(shí)候我們需要把很多的圖片合成視頻,或者說自己寫一個(gè)腳本去加快或者放慢視頻。我寫這個(gè)的目的,是因?yàn)槲矣幸粋€(gè)模型只能處理圖片,但是我想看視頻的處理效果,于是我先視頻變成圖片,然后處理好后把圖片變成視頻,這樣就解決需求啦~

十分詳細(xì)代碼實(shí)現(xiàn)

首先先說明需要自己修改的參數(shù),代碼如下:

if __name__ == '__main__':
    im_dir = ' '  # 圖片幀存放路徑,這里寫一個(gè)文件夾
    dir_list=os.listdir(im_dir)
    fps = 20  # 設(shè)置一個(gè)幀率,每秒鐘幀數(shù)越多,視頻就越快
    dir_video=' ' #合成后視頻的存放視頻
    video_dir = dir_video + '.avi'
    frame2video(im_dir, video_dir, fps)

然后再設(shè)置一個(gè)方法,來儲存截取后的圖片:

def frame2video(im_dir, video_dir, fps):
    im_list = os.listdir(im_dir)
    im_list.sort(key=lambda x: int(x.replace("frame", "").split('.')[0])) 
    img = Image.open(os.path.join(im_dir, im_list[0]))
    img_size = img.size  # 獲得圖片分辨率,文件夾下的圖片分辨率需要一致,要是不一致可以寫一個(gè)if函數(shù)resize一下~
    fourcc = cv2.VideoWriter_fourcc(*'XVID')  # opencv版本是3
    videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
    for i in im_list:
        im_name = os.path.join(im_dir + i)
        frame = cv2.imdecode(np.fromfile(im_name, dtype=np.uint8), -1)
        videoWriter.write(frame)
    videoWriter.release()
    print('Done')

大功告成

import cv2
import os
import numpy as np
from PIL import Image

def frame2video(im_dir, video_dir, fps):
    im_list = os.listdir(im_dir)
    im_list.sort(key=lambda x: int(x.replace("frame", "").split('.')[0]))
    img = Image.open(os.path.join(im_dir, im_list[0]))
    img_size = img.size 
    fourcc = cv2.VideoWriter_fourcc(*'XVID')  # opencv版本是3
    videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)

    for i in im_list:
        im_name = os.path.join(im_dir + i)
        frame = cv2.imdecode(np.fromfile(im_name, dtype=np.uint8), -1)
        videoWriter.write(frame)

    videoWriter.release()
    print('Done')


if __name__ == '__main__':
    im_dir = ' '
    dir_list=os.listdir(im_dir)
    fps = 20
    dir_video=' '
    video_dir = dir_video + '.avi'
    frame2video(im_dir, video_dir, fps) 

以上就是Python實(shí)現(xiàn)圖片和視頻的相互轉(zhuǎn)換的詳細(xì)內(nèi)容,更多關(guān)于Python圖片和視頻相互轉(zhuǎn)換的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python線性回歸實(shí)戰(zhàn)分析

    Python線性回歸實(shí)戰(zhàn)分析

    這篇文章主要介紹了Python線性回歸實(shí)戰(zhàn)分析以及代碼講解,對此有興趣的朋友學(xué)習(xí)下吧。
    2018-02-02
  • 詳解Django+Uwsgi+Nginx 實(shí)現(xiàn)生產(chǎn)環(huán)境部署

    詳解Django+Uwsgi+Nginx 實(shí)現(xiàn)生產(chǎn)環(huán)境部署

    這篇文章主要介紹了詳解Django+Uwsgi+Nginx 實(shí)現(xiàn)生產(chǎn)環(huán)境部署,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Python基礎(chǔ)詳解之郵件處理

    Python基礎(chǔ)詳解之郵件處理

    這篇文章主要介紹了Python基礎(chǔ)詳解之郵件處理,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • pycharm實(shí)現(xiàn)增加運(yùn)行時(shí)內(nèi)存

    pycharm實(shí)現(xiàn)增加運(yùn)行時(shí)內(nèi)存

    這篇文章主要介紹了pycharm實(shí)現(xiàn)增加運(yùn)行時(shí)內(nèi)存方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python異步編程之新舊協(xié)程的實(shí)現(xiàn)對比

    Python異步編程之新舊協(xié)程的實(shí)現(xiàn)對比

    Python中新舊協(xié)程的實(shí)現(xiàn)方式在協(xié)程發(fā)展史上有一段交集,并且舊協(xié)程基于生成器的協(xié)程語法讓生成器和協(xié)程兩個(gè)概念混淆,所以對學(xué)習(xí)者會造成一定的困擾,本文主要說明兩種協(xié)程的實(shí)現(xiàn)方式的差異,需要的可以了解下
    2024-01-01
  • Python實(shí)現(xiàn)多進(jìn)程之間共享變量

    Python實(shí)現(xiàn)多進(jìn)程之間共享變量

    Python多線程和多進(jìn)程之間共享變量的方法有所不同,多線程可以直接使用global變量,而多進(jìn)程則需要使用multiprocessing庫中的Value、Array、Queue等或Manager模塊,Pool進(jìn)程池中進(jìn)程間共享變量時(shí),必須使用Manager模塊,在共享list時(shí),不能直接賦值
    2024-11-11
  • 如何用Python生成二維碼、解析二維碼

    如何用Python生成二維碼、解析二維碼

    這篇文章主要介紹了如何用Python生成二維碼、解析二維碼,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • python中matplotlib實(shí)現(xiàn)最小二乘法擬合的過程詳解

    python中matplotlib實(shí)現(xiàn)最小二乘法擬合的過程詳解

    這篇文章主要給大家介紹了關(guān)于python中matplotlib實(shí)現(xiàn)最小二乘法擬合的相關(guān)資料,文中通過示例代碼詳細(xì)介紹了關(guān)于最小二乘法擬合直線和最小二乘法擬合曲線的實(shí)現(xiàn)過程,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • python向字符串中添加元素的實(shí)例方法

    python向字符串中添加元素的實(shí)例方法

    在本篇文章里小編給大家分享了關(guān)于python向字符串中添加元素的實(shí)例方法以及相關(guān)知識點(diǎn)內(nèi)容,有需要的朋友們跟著學(xué)習(xí)參考下。
    2019-06-06
  • Pytorch中的Tensorboard與Transforms搭配使用

    Pytorch中的Tensorboard與Transforms搭配使用

    這篇文章主要介紹了Pytorch中的Tensorboard與Transforms搭配使用,主要是結(jié)合了前兩篇文章的的一個(gè)小練習(xí),感興趣的小伙伴可以來練習(xí)一下,希望對你的學(xué)習(xí)有所幫助
    2021-12-12

最新評論

蒲城县| 元氏县| 东台市| 赤城县| 论坛| 西安市| 施秉县| 阜新| 司法| 上思县| 民乐县| 共和县| 循化| 区。| 兴海县| 新乡市| 河曲县| 高邑县| 滨海县| 潍坊市| 静乐县| 洛宁县| 定州市| 马山县| 于都县| 罗城| 新邵县| 洪雅县| 徐水县| 基隆市| 阿城市| 丹巴县| 景泰县| 土默特右旗| 青州市| 化隆| 黄平县| 敖汉旗| 视频| 鄯善县| 资溪县|