python opencv 录制视频_OpenCV Python 录制视频
學(xué)到實(shí)用OpenCV調(diào)用筆記本電腦的攝像頭,并錄制視頻保存到本地硬盤的時(shí)候,出現(xiàn)了一點(diǎn)故障,那就是獲取到的文件總是為0KB。經(jīng)過一番查找,終于找到了解決辦法。
調(diào)用攝像頭
調(diào)用攝像頭作為本實(shí)驗(yàn)的基礎(chǔ)是必不可少的,因?yàn)槲覀兒苡锌赡茉诔跏蓟倪@一步出錯(cuò),而導(dǎo)致整個(gè)視頻錄制的失敗。
引入庫(kù)支持
import cv2
初始化
初始化的時(shí)候,參數(shù)可以是整數(shù),也可以是外部的視頻文件的名稱。這里需要強(qiáng)調(diào)的是整數(shù)類型。
通常來說,筆記本電腦內(nèi)置了一個(gè)攝像頭,我們用0代表,其余的外接攝像頭我們可以按照具體的情況來使用1,2,3··· ··· 來進(jìn)行調(diào)用和數(shù)據(jù)的采集。
cap = cv2.VideoCapture(0)
有的時(shí)候,我們初始化完成了,但是并不知道到底成功了沒有,這時(shí),我們可以調(diào)用cap.isOpened()方法來偵測(cè)。
調(diào)整界面大小
默認(rèn)的窗體界面是640X480的,但是我們卻也可以修改,有固定方式和可任意調(diào)節(jié)方式。
固定大小方式:
cap = cv2.VideoCapture(0)
# cap.set(3,1080)
# cap.set(4,720)
窗口可任意調(diào)節(jié)方式:
cv2.namedWindow(cv2.WINDOW_NORMAL)
實(shí)時(shí)顯示
實(shí)時(shí)顯示就是將OpenCV采集到的一幀一幀的數(shù)據(jù)實(shí)時(shí)的顯示到界面窗體上。
import cv2
# 初始化攝像頭
cap = cv2.VideoCapture(0)
while cap.isOpened():
# 采集一幀一幀的圖像數(shù)據(jù)
isSuccess,frame = cap.read()
# 實(shí)時(shí)的將采集到的數(shù)據(jù)顯示到界面上
if isSuccess:
cv2.imshow("My Capture",frame)
# 實(shí)現(xiàn)按下“q”鍵退出程序
if cv2.waitKey(1)&0xFF == ord('q'):
break
# 釋放攝像頭資源
cap.release()
cv2.destoryAllWindows()
如此,便可以實(shí)時(shí)的獲取到攝像頭采集到的數(shù)據(jù)了。
錄制視頻并保存
學(xué)會(huì)了如何采集數(shù)據(jù),下一步就是將采集到的數(shù)據(jù)寫入到一個(gè)視頻文件中。這就涉及到了編碼的問題了,因?yàn)閷D片寫到視頻文件中需要實(shí)時(shí)的壓縮,處理。所以我們的電腦上要裝有相應(yīng)的碼庫(kù)。
fourcc問題解決
一開始我是用的fourcc是:
fourcc = cv2.VideoWriter_fourcc(*"XVID")
但是總是不能正確的錄制出視頻文件,顯示大小為0KB。最后發(fā)現(xiàn)是電腦上沒有響應(yīng)的視頻解碼庫(kù)導(dǎo)致的。
解決辦法:
一開始按照網(wǎng)上的參考資料,說是將out的第二個(gè)參數(shù)寫為-1,這樣運(yùn)行的時(shí)候會(huì)彈出系統(tǒng)擁有的壓縮方式,即可解決。但是在博主親試之下,完美的失敗了。 :(
第二種方式,博主親測(cè)有效,改變了fourcc的類型。
fourcc = cv2.cv.CV_FOURCC("D", "I", "B", " ")
代碼實(shí)現(xiàn)
下面看一個(gè)完整的錄制視頻的小例子。
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# __author__ = '郭 璞'
# __date__ = '2016/9/7'
# __Desc__ = 使用Python借助opencv實(shí)現(xiàn)對(duì)圖像的讀取,寫入
import cv2
import numpy as np
# 選取攝像頭,0為筆記本內(nèi)置的攝像頭,1,2···為外接的攝像頭
cap = cv2.VideoCapture(0)
# cap.set(3,1080)
# cap.set(4,720)
# 為保存視頻做準(zhǔn)備
fourcc = cv2.cv.CV_FOURCC("D", "I", "B", " ")
# 第三個(gè)參數(shù)則是鏡頭快慢的,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)
# 在幀上進(jìn)行操作
# gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
# 開始保存視頻
out.write(frame)
# 顯示結(jié)果幀
cv2.imshow("frame", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# 釋放攝像頭資源
cap.release()
out.release()
cv2.destroyAllWindows()
效果展示
親測(cè)有效!
總結(jié)
本次試驗(yàn)收獲有:
如何使用OpenCV配合Python實(shí)時(shí)捕獲攝像頭數(shù)據(jù)
windows下錄制視頻文件大小為零的異常
修改圖像顯示窗體大小的兩種方式
錄制視頻的過程中,輸出為快慢鏡頭的調(diào)節(jié)方式
總結(jié)
以上是生活随笔為你收集整理的python opencv 录制视频_OpenCV Python 录制视频的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教你如何找到最适合自己的配置如何查看自己
- 下一篇: object的实例是 python_Py