亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么實現圖片和視頻的相互轉換

發布時間:2021-12-18 11:06:20 來源:億速云 閱讀:164 作者:iii 欄目:開發技術

本篇內容主要講解“Python怎么實現圖片和視頻的相互轉換”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python怎么實現圖片和視頻的相互轉換”吧!

使用背景

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

也有時候需要把視頻裁剪成圖片,進行后續操作。

這里提供兩種方法,一是視頻轉圖像;二是圖像轉視頻。 

一、視頻轉圖像

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

  • 直接改變輸入文件夾和輸出文件夾的位置,就可以實現功能

  • 輸出的圖片能按照一定格式命名,這里是以20210823_0001命名

  • 逐一遍歷文件夾中視頻,序號之間可以連續(也可不連續,需要改代碼)

  • 利用雙線性插值方法,就算圖片變大了,也能保證分辨率(關于雙線性,這里只是調用opencv方法實現,具體實現代碼和原理可看我下一篇博文)

  • 代碼解釋十分詳細,一看就懂

十分詳細代碼實現

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

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

然后再設置一個方法,來儲存截取后的圖片:

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

之后讀取文件夾:

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

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

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幀/秒,第二張圖是一秒取三張圖片后,圖片儲存在文件夾中的圖。

Python怎么實現圖片和視頻的相互轉換

Python怎么實現圖片和視頻的相互轉換

二、圖像轉視頻

有時候我們需要把很多的圖片合成視頻,或者說自己寫一個腳本去加快或者放慢視頻。我寫這個的目的,是因為我有一個模型只能處理圖片,但是我想看視頻的處理效果,于是我先視頻變成圖片,然后處理好后把圖片變成視頻,這樣就解決需求啦~

十分詳細代碼實現

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

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)

然后再設置一個方法,來儲存截取后的圖片:

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  # 獲得圖片分辨率,文件夾下的圖片分辨率需要一致,要是不一致可以寫一個if函數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怎么實現圖片和視頻的相互轉換”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

麻阳| 泽库县| 确山县| 蓝田县| 邮箱| 阿城市| 五台县| 太仆寺旗| 关岭| 漯河市| 巴马| 芦溪县| 霍城县| 东至县| 刚察县| 乌海市| 鄢陵县| 雷山县| 漳浦县| 桑植县| 伊宁市| 阳原县| 新昌县| 海阳市| 隆回县| 三门峡市| 开阳县| 察雅县| 河池市| 石渠县| 汝城县| 年辖:市辖区| 太谷县| 宁蒗| 上高县| 浮山县| 安岳县| 瑞昌市| 旬邑县| 林州市| 深水埗区|