Python利用VideoCapture讀取視頻或攝像頭并進(jìn)行保存
一、語法:cap = cv2.VideoCapture(0)
說明:參數(shù)0表示默認(rèn)為筆記本的內(nèi)置第一個(gè)攝像頭,如果需要讀取已有的視頻則參數(shù)改為視頻所在路徑路徑,例如:cap=cv2.VideoCapture('video.mp4')
二、語法:cap.isOpened()
說明:判斷視頻對(duì)象是否成功讀取,成功讀取視頻對(duì)象返回True。
三、語法:ret,frame = cap.read()
說明:按幀讀取視頻,返回值ret是布爾型,正確讀取則返回True,讀取失敗或讀取視頻結(jié)尾則會(huì)返回False。frame為每一幀的圖像,這里圖像是三維矩陣,即frame.shape = (640,480,3),讀取的圖像為BGR格式。
四、語法:key = cv2.waitKey(1)
說明:等待鍵盤輸入,參數(shù)1表示延時(shí)1ms切換到下一幀,參數(shù)為0表示顯示當(dāng)前幀,相當(dāng)于暫停。
五、讀取攝像頭并保存為視頻代碼演示
import cv2 def videocapture(): cap=cv2.VideoCapture(0) #生成讀取攝像頭對(duì)象 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #獲取視頻的寬度 height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #獲取視頻的高度 fps = cap.get(cv2.CAP_PROP_FPS) #獲取視頻的幀率 fourcc = int(cap.get(cv2.CAP_PROP_FOURCC)) #視頻的編碼 #定義視頻對(duì)象輸出 writer = cv2.VideoWriter("video_result.mp4", fourcc, fps, (width, height)) while cap.isOpened(): ret, frame = cap.read() #讀取攝像頭畫面 cv2.imshow('teswell', frame) #顯示畫面 key = cv2.waitKey(24) writer.write(frame) #視頻保存 # 按Q退出 if key == ord('q'): break cap.release() #釋放攝像頭 cv2.destroyAllWindows() #釋放所有顯示圖像窗口 if __name__ == '__main__' : videocapture()
六、讀取視頻并按幀進(jìn)行保存代碼演示:
import numpy as np import cv2 import os def video2image(video_dir,save_dir): cap = cv2.VideoCapture(video_dir) #生成讀取視頻對(duì)象 n = 1 #計(jì)數(shù) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #獲取視頻的寬度 height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #獲取視頻的高度 fps = cap.get(cv2.CAP_PROP_FPS) #獲取視頻的幀率 fourcc = int(cap.get(cv2.CAP_PROP_FOURCC)) #視頻的編碼 # 定義視頻輸出 #writer = cv2.VideoWriter("teswellvideo_02_result.mp4", fourcc, fps, (width, height)) i = 0 timeF = int(fps) #視頻幀計(jì)數(shù)間隔頻率 while cap.isOpened(): ret,frame = cap.read() #按幀讀取視頻 #到視頻結(jié)尾時(shí)終止 if ret is False : break #每隔timeF幀進(jìn)行存儲(chǔ)操作 if (n % timeF == 0) : i += 1 print('保存第 %s 張圖像' % i) save_image_dir = os.path.join(save_dir,'%s.jpg' % i) print('save_image_dir: ', save_image_dir) cv2.imwrite(save_image_dir,frame) #保存視頻幀圖像 n = n + 1 cv2.waitKey(1) #延時(shí)1ms cap.release() #釋放視頻對(duì)象 #讀取文件夾所有視頻,每個(gè)視頻按幀保存圖像 def video2image_multi(video_path,save_path): video_list = os.listdir(video_path) for i in range(len(video_list)) : video_dir = os.path.join(video_path,video_list[i]) cap = cv2.VideoCapture(video_dir) fps = cap.get(cv2.CAP_PROP_FPS) # 視頻的幀率 save_num = 0 n = 1 #計(jì)數(shù) timeF = int(fps) # 視頻幀計(jì)數(shù)間隔頻率 while cap.isOpened(): ret,frame = cap.read() if ret is False : break #每隔timeF幀進(jìn)行存儲(chǔ)操作 if (n % timeF == 0) : save_num += 1 save_image_dir = os.path.join(save_path,'%s_%s.jpg' % (i,save_num)) cv2.imwrite(save_image_dir,frame) n = n + 1 cv2.waitKey(1) cap.release() print('讀取第 %s 個(gè)視頻完成 ?。?!' % i) if __name__ == '__main__' : video_to_image(r'E:\AI\video.mp4', r'E:\AI\video2image')
以上就是Python利用VideoCapture讀取視頻或攝像頭并進(jìn)行保存的詳細(xì)內(nèi)容,更多關(guān)于Python VideoCapture讀取視頻 攝像頭的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
簡(jiǎn)單的Python動(dòng)態(tài)可視化神器,編程小白也能上手
這篇文章就來介紹簡(jiǎn)單的Python動(dòng)態(tài)可視化神器,最近發(fā)現(xiàn)了一個(gè)寶藏動(dòng)態(tài)可視化庫,非常簡(jiǎn)單,即使是小白也能輕松上手。這個(gè)庫就是motionchart,它能夠用 pandas 的 dataframe 數(shù)據(jù)直接創(chuàng)建交互式的動(dòng)態(tài)圖表,下面來簡(jiǎn)單看一下如何使用。2021-10-10解決django框架model中外鍵不落實(shí)到數(shù)據(jù)庫問題
這篇文章主要介紹了解決django框架model中外鍵不落實(shí)到數(shù)據(jù)庫問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python+PyQt5實(shí)現(xiàn)數(shù)據(jù)庫表格動(dòng)態(tài)增刪改
這篇文章主要為大家介紹如何利用Python中的PyQt5模塊實(shí)現(xiàn)對(duì)數(shù)據(jù)庫表格的動(dòng)態(tài)增刪改,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-03-03Python設(shè)置默認(rèn)編碼為utf8的方法
這篇文章主要介紹了Python設(shè)置默認(rèn)編碼為utf8的方法,結(jié)合實(shí)例形式分析了Python針對(duì)文件編碼的設(shè)置方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-07-07PyTorch搭建LSTM實(shí)現(xiàn)多變量時(shí)序負(fù)荷預(yù)測(cè)
這篇文章主要為大家介紹了PyTorch搭建LSTM實(shí)現(xiàn)多變量時(shí)間序列預(yù)測(cè)及負(fù)荷預(yù)測(cè),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python的Django框架中消息通知的計(jì)數(shù)器實(shí)現(xiàn)教程
通知的計(jì)數(shù)器非常有用,新通知時(shí)+1和讀過通知后的-1是最基本的功能,這里我們就來看一下Python的Django框架中消息通知的計(jì)數(shù)器實(shí)現(xiàn)教程2016-06-06