需要源碼和視頻請(qǐng)點(diǎn)贊關(guān)注收藏后評(píng)論區(qū)留言私信~~~
在實(shí)際開發(fā)過程中,很多時(shí)候希望保存一段視頻,為此,OpenCV提供了VideoWriter類,下面先熟悉一下里面的各種方法
一、VideoWriter類
VideoWriter類的常用方法包括它的構(gòu)造方法,write方法和release方法 語法如下
VideoWriter object=cv2.VideoWriter(filename,fourcc,fps,frameSize)
filename 保存視頻時(shí)的路徑
fourcc 用4個(gè)字符寶石的視頻編碼格式
fps 幀速率
frameSize 每一幀的大小
使用cv2.VideoWriter_fourcc來確定視頻編碼格式
常用的視頻編碼格式?為了保存一段視頻 還需要使用write方法 語法如下
cv2.VideoWriter.write(frame)
frame 讀取到的幀
二、使用VideoWriter類實(shí)戰(zhàn)?
?使用VideoWriter類保存一段視頻需要經(jīng)過一下幾個(gè)步驟:創(chuàng)建VideoWriter類對(duì)象,寫入讀取到的幀,釋放VideoWriter類對(duì)象等,而且這段視頻既可以是攝像頭視頻,也可以是視頻文件,下面對(duì)保存攝像頭視頻和保存視頻文件進(jìn)行講解
下面保存一段攝像頭視頻
import cv2
capture = cv2(0, cv2.CAP_DSHOW) # 打開筆記本內(nèi)置攝像頭
fourcc = cv2.VideWiter_fourcc('X', 'V', 'I', 'D') # 確定視頻被保存后的編碼格式
output = cv2.Vidoriter("output.avi", fourcc, 20, (640, 480)) # 創(chuàng)建VideoWriter類對(duì)象
while (capture.isOpened()): # 筆記本內(nèi)置攝像頭被打開后
retval, frame = capture.read() # 從攝像頭中實(shí)時(shí)讀取視頻
if retval = True: # 讀取到攝像頭視頻后
outputrite(frame) # 在VideoWriter類對(duì)象中寫入讀取到的幀
cv2.imsw("frame", frame) # 在窗口中顯示攝像頭視頻
key = cv2.waitKey(1) # 窗口的圖像刷新時(shí)間為1毫秒
if key == 27: # 如果按下Esc鍵
break
capture.release() # 關(guān)閉筆記本內(nèi)置攝像頭
output.release( 釋放VideoWriter類對(duì)象
cv2.destroyAllWindows() # 銷毀顯示攝像頭視頻的窗口
下面保存一段時(shí)長為10秒的攝像頭視頻
import cv2
capture = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 打開筆記本內(nèi)置攝像頭
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 確定視頻被保存后的編碼格式
fps = 20 # 幀速率
# 創(chuàng)建VideoWriter類對(duì)象
output = cVideoWriter("ten_Seconds.avi", fourcc, fps, (640, 480))
frame_Num = 10 * fps # 時(shí)長為10秒的攝像頭視頻含有的幀數(shù)
# 筆記本內(nèi)置攝像頭被打開且時(shí)長為10秒的攝像頭視頻含有的幀數(shù)大于0
while (capture.isOpened() and frame_Num > 0):
retval, frame =apture.read() # 從攝像頭中實(shí)時(shí)讀取視頻
if retval == True: # 讀取到攝像頭視頻后
output.wrirame) # 在VideoWriter類對(duì)象中寫入讀取到的幀
cv2.imshow("frame", frame) # 在窗口中顯示攝像頭視頻
key = cv2.waitKey(1) # 窗口的圖像刷新時(shí)間為1毫秒
frame_Num -= 1 # 時(shí)長為10秒的攝像頭視頻含有的幀數(shù)減少一幀
capture.release() # 關(guān)閉筆記本內(nèi)置攝像頭
output.release() # 釋放VideoWriter類對(duì)象
cv2.destroyAllWindows() # 銷毀顯示攝像頭視頻的窗口
下面保存一個(gè)視頻文件 讀取視頻文件后再保存當(dāng)當(dāng)前項(xiàng)目路徑下
部分代碼如下
import cv2
video = cv2.VideoCapture("公司宣傳.avi") # 打開視頻文件
fps = video.get(cv2.CAP_PROP_FPS) # 獲取視頻文件的幀速率
# 獲取視頻文件的幀大小
size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(video.gcv2.CAP_PROP_FRAME_HEIGHT)))
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 確定視頻被保存后的編碼格式
output = cv2("copy.avi", fourcc, fps, size) # 創(chuàng)建VideoWriter類對(duì)象
while (video.isOpe()): # 視頻文件被打開后
retval, frame =video.read() # 讀取視頻文件
if retval == True: # 讀取到視頻文件后
output.wri(rame) # 在VideoWriter類對(duì)象中寫入讀取到的幀
else:
br
print("公司宣傳.avi已經(jīng)保存為PyCharm當(dāng)前項(xiàng)目路徑下的copy.avi。") # 控制臺(tái)輸出提示信息
video.release() # 關(guān)閉視頻文件
output.release() # 釋放VideoWriter類對(duì)象
保存視頻文件前十秒的視頻
import cv2
video = cv2.VideoCapture("公司宣傳.avi") # 打開視頻文件
fps = video.get(cv2.CAP_PROP_FPS) # 獲取視頻文件的幀速率
# 獲取視頻文件的幀大小
size = (int(video.g(cv2.CAP_PROP_FRAME_WIDTH)),
int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') # 確定視頻被保存后的編碼格式
output = cv2.VideoWs #頻文件的前10秒視頻含有的幀數(shù)
# 視頻文件被打開后且視頻文件的前10秒視頻含有的幀數(shù)大于0
while (video.isOpene and frame_Num > 0):
retval, fr= video.read() # 讀取視頻文件
if retval == True: # 讀取到視頻文件后
outpu.write(frame) # 在VideoWriter類對(duì)象中寫入讀取到的幀
frame_Num -= 1 # 視頻文件的前10秒視頻含有的幀數(shù)減少一幀
# 控制臺(tái)輸出提示信息
print("公司宣傳.avi的前10s視頻已經(jīng)保存為PyCharm當(dāng)前項(xiàng)目路徑下的ten_Seconds.avi。")
video.release() # 關(guān)頻文件
output.release() # 釋放VideoWriter類對(duì)象
總結(jié)
視頻是由一系列連續(xù)的圖像構(gòu)成的,這一系列連續(xù)的圖像被稱作幀,幀是以固定的時(shí)間間隔從視頻中獲取的。因?yàn)橐曨l播放的速度就是獲取幀的速度,所以把視頻播放的速度稱作幀速率,其單位是幀/s(即1s內(nèi)出現(xiàn)的圖像數(shù))。所謂視頻處理,處理的對(duì)象就是從視頻中獲取的幀,而后使用圖像處理的方法對(duì)獲取的幀進(jìn)行處理文章來源:http://www.zghlxwxcb.cn/news/detail-722079.html
創(chuàng)作不易 覺得有幫助請(qǐng)點(diǎn)贊關(guān)注收藏~~~文章來源地址http://www.zghlxwxcb.cn/news/detail-722079.html
到了這里,關(guān)于OpenCV保存攝像頭視頻和視頻文件操作實(shí)戰(zhàn)(附Python源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!