使用opencv-python 視頻分解圖片+圖片合成視頻

  1. 安裝opencv
pip install opencv-python      
  1. 視頻分解圖片
import cv2
import numpy as np
import os
os.chdir('F:/opencv/test')

##讀取視頻,並逐幀分解成圖片
cap = cv2.VideoCapture('1.mp4')  #打開一個視頻
isOpened = cap.isOpened() #判斷是否打開
print(isOpened)

#獲取視頻的相關信息,視頻的每一幀圖片的寬度都是一致的
fps = cap.get(cv2.CAP_PROP_FPS) #幀率,即每秒鐘由多少張圖片組成
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #獲取寬度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #獲取高度
print(fps,width,height)  #輸出相關信息

i = 0  
while (isOpened):
    #讀取視頻的前兩秒的圖像,共計2*int(fps)張
    if i ==int(fps)*2 :  
        break
    else:
        i = i+1
    (flag,frame) = cap.read() #讀取每一張 flag frame
    filename = 'image'+str(i)+'.jpg'
    #將讀取的圖片寫入文件中,
    if flag == True:
        cv2.imwrite(filename,frame,[cv2.IMWRITE_JPEG_QUALITY,100])  #確定圖片質量,100算是高的
print('end!')        
  1. 圖片合成視頻
##讀取零散圖片(上面分解的圖片),並將其合成視頻
img = cv2.imread('image1.jpg')
imginfo = img.shape
size = (imginfo[1],imginfo[0])  #與默認不同,opencv使用 height在前,width在後,所有需要自己重新排序
print(size)

#創建寫入對象,包括 新建視頻名稱,每秒鐘多少幀圖片(10張) ,size大小
#一般人眼最低分辨率爲19幀/秒
videoWrite = cv2.VideoWriter('2.mp4',-1,10,size) 

for i in range(1,40):
    filename = 'image'+str(i)+'.jpg'
    img = cv2.imread(filename,1)  #1 表示彩圖,0表示灰度圖  
    
    #直接寫入圖片對應的數據
    videoWrite.write(img)  

videoWrite.release() #關閉寫入對象
print('end')

上述的離散再合成,會丟失視頻的聲音信息。

需要:

  • 通道順序
    opencv讀取的彩圖的三個通道的順序爲:gbr ,與常規的rgb順序相反。
  • 寬度 高度順序
    一般 width,在height之前。但是 cv2讀取進行的圖片的Info中,先是 height,後是 width。這個需要注意。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章