天天看點

python opencv 錄制視訊_OpenCV Python 錄制視訊

學到實用OpenCV調用筆記本電腦的攝像頭,并錄制視訊儲存到本地硬碟的時候,出現了一點故障,那就是擷取到的檔案總是為0KB。經過一番查找,終于找到了解決辦法。

調用攝像頭

調用攝像頭作為本實驗的基礎是必不可少的,因為我們很有可能在初始化的這一步出錯,而導緻整個視訊錄制的失敗。

引入庫支援

import cv2

初始化

初始化的時候,參數可以是整數,也可以是外部的視訊檔案的名稱。這裡需要強調的是整數類型。

通常來說,筆記本電腦内置了一個攝像頭,我們用0代表,其餘的外接攝像頭我們可以按照具體的情況來使用1,2,3··· ··· 來進行調用和資料的采集。

cap = cv2.VideoCapture(0)

有的時候,我們初始化完成了,但是并不知道到底成功了沒有,這時,我們可以調用cap.isOpened()方法來偵測。

調整界面大小

預設的窗體界面是640X480的,但是我們卻也可以修改,有固定方式和可任意調節方式。

固定大小方式:

cap = cv2.VideoCapture(0)

# cap.set(3,1080)

# cap.set(4,720)

視窗可任意調節方式:

cv2.namedWindow(cv2.WINDOW_NORMAL)

實時顯示

實時顯示就是将OpenCV采集到的一幀一幀的資料實時的顯示到界面窗體上。

import cv2

# 初始化攝像頭

cap = cv2.VideoCapture(0)

while cap.isOpened():

# 采集一幀一幀的圖像資料

isSuccess,frame = cap.read()

# 實時的将采集到的資料顯示到界面上

if isSuccess:

cv2.imshow("My Capture",frame)

# 實作按下“q”鍵退出程式

if cv2.waitKey(1)&0xFF == ord('q'):

break

# 釋放攝像頭資源

cap.release()

cv2.destoryAllWindows()

如此,便可以實時的擷取到攝像頭采集到的資料了。

錄制視訊并儲存

學會了如何采集資料,下一步就是将采集到的資料寫入到一個視訊檔案中。這就涉及到了編碼的問題了,因為将圖檔寫到視訊檔案中需要實時的壓縮,處理。是以我們的電腦上要裝有相應的碼庫。

fourcc問題解決

一開始我是用的fourcc是:

fourcc = cv2.VideoWriter_fourcc(*"XVID")

但是總是不能正确的錄制出視訊檔案,顯示大小為0KB。最後發現是電腦上沒有響應的視訊解碼庫導緻的。

解決辦法:

一開始按照網上的參考資料,說是将out的第二個參數寫為-1,這樣運作的時候會彈出系統擁有的壓縮方式,即可解決。但是在部落客親試之下,完美的失敗了。 :(

第二種方式,部落客親測有效,改變了fourcc的類型。

fourcc = cv2.cv.CV_FOURCC("D", "I", "B", " ")

代碼實作

下面看一個完整的錄制視訊的小例子。

# coding:utf-8

import sys

reload(sys)

sys.setdefaultencoding('utf8')

# __author__ = '郭 璞'

# __date__ = '2016/9/7'

# __Desc__ = 使用Python借助opencv實作對圖像的讀取,寫入

import cv2

import numpy as np

# 選取攝像頭,0為筆記本内置的攝像頭,1,2···為外接的攝像頭

cap = cv2.VideoCapture(0)

# cap.set(3,1080)

# cap.set(4,720)

# 為儲存視訊做準備

fourcc = cv2.cv.CV_FOURCC("D", "I", "B", " ")

# 第三個參數則是鏡頭快慢的,20為正常,小于二十為慢鏡頭

out = cv2.VideoWriter('output2.avi', fourcc,3.0,(640,480))

while True:

# 一幀一幀的擷取圖像

ret,frame = cap.read()

if ret == True:

frame = cv2.flip(frame, 1)

# 在幀上進行操作

# gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

# 開始儲存視訊

out.write(frame)

# 顯示結果幀

cv2.imshow("frame", frame)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

else:

break

# 釋放攝像頭資源

cap.release()

out.release()

cv2.destroyAllWindows()

效果展示

python opencv 錄制視訊_OpenCV Python 錄制視訊

親測有效!

總結

本次試驗收獲有:

如何使用OpenCV配合Python實時捕獲攝像頭資料

windows下錄制視訊檔案大小為零的異常

修改圖像顯示窗體大小的兩種方式

錄制視訊的過程中,輸出為快慢鏡頭的調節方式