- 安裝opencv
pip install opencv-python
- 視頻分解圖片
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!')
- 圖片合成視頻
##讀取零散圖片(上面分解的圖片),並將其合成視頻
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。這個需要注意。