網(wǎng)站首頁 編程語言 正文
一、語法:cap = cv2.VideoCapture(0)
說明:參數(shù)0表示默認為筆記本的內(nèi)置第一個攝像頭,如果需要讀取已有的視頻則參數(shù)改為視頻所在路徑路徑,例如:cap=cv2.VideoCapture('video.mp4')
二、語法:cap.isOpened()
說明:判斷視頻對象是否成功讀取,成功讀取視頻對象返回True。
三、語法:ret,frame = cap.read()
說明:按幀讀取視頻,返回值ret是布爾型,正確讀取則返回True,讀取失敗或讀取視頻結(jié)尾則會返回False。frame為每一幀的圖像,這里圖像是三維矩陣,即frame.shape = (640,480,3),讀取的圖像為BGR格式。
四、語法:key = cv2.waitKey(1)
說明:等待鍵盤輸入,參數(shù)1表示延時1ms切換到下一幀,參數(shù)為0表示顯示當(dāng)前幀,相當(dāng)于暫停。
五、讀取攝像頭并保存為視頻代碼演示
import cv2
def videocapture():
cap=cv2.VideoCapture(0) #生成讀取攝像頭對象
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("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()
六、讀取視頻并按幀進行保存代碼演示:
import numpy as np
import cv2
import os
def video2image(video_dir,save_dir):
cap = cv2.VideoCapture(video_dir) #生成讀取視頻對象
n = 1 #計數(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) #視頻幀計數(shù)間隔頻率
while cap.isOpened():
ret,frame = cap.read() #按幀讀取視頻
#到視頻結(jié)尾時終止
if ret is False :
break
#每隔timeF幀進行存儲操作
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) #延時1ms
cap.release() #釋放視頻對象
#讀取文件夾所有視頻,每個視頻按幀保存圖像
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 #計數(shù)
timeF = int(fps) # 視頻幀計數(shù)間隔頻率
while cap.isOpened():
ret,frame = cap.read()
if ret is False :
break
#每隔timeF幀進行存儲操作
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 個視頻完成 !!!' % i)
if __name__ == '__main__' :
video_to_image(r'E:\AI\video.mp4', r'E:\AI\video2image')
原文鏈接:https://blog.csdn.net/weixin_40922285/article/details/102967331
相關(guān)推薦
- 2022-07-03 el-upload上傳組件的動態(tài)添加;el-upload動態(tài)上傳文件;el-upload區(qū)分文件是哪
- 2023-02-01 Bat腳本之在文件中查找多個字符串并保存到文件中_DOS/BAT
- 2023-03-04 Golang設(shè)計模式之組合模式講解_Golang
- 2021-12-09 銀河麒麟4.0.2(Ubuntu)擴展boot分區(qū)過程介紹_Linux
- 2023-04-19 C++實現(xiàn)反轉(zhuǎn)鏈表的兩種方法_C 語言
- 2022-12-21 使用redis如何生成自增序列號碼_Redis
- 2023-03-02 Flutter有狀態(tài)組件StatefulWidget生命周期詳解_Android
- 2023-07-07 根據(jù)文件后綴名稱獲取contentType,其中Minio上傳文件會用到contentType
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支