VideoCapture() 虛擬采集器,一般設備號從0開始
cap.read() 讀取視頻幀
返回值有兩個,第一個為狀態(tài)值,讀到幀為true
第二個值為視頻幀
cap.release() 釋放資源
示例程序:
import cv2 #引入CV庫
#創(chuàng)建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',300,300) #設置窗口大小
#獲取視頻設備
cap = cv2.VideoCapture(0)
while True:
#從攝像頭讀視頻幀
ret,frame = cap.read()
#將視頻幀在窗口中顯示
cv2.imshow('video',frame)
key = cv2.waitKey(1) #不能為0,0為等待中斷,只能讀取到一幀的數(shù)據
if(key & 0xFF == ord('q')):
break
#釋放資源
cap.release() #釋放視頻資源
cv2.destroyAllWindows() #釋放窗口資源
運行結果:
讀取視頻文件
從視頻文件中讀取視頻幀
cap = cv2.VideoCapture("文件地址") #從文件獲取視頻
只處理視頻,不處理音頻,所以讀取到的視頻沒有聲音
播放速度設置
key = cv2.waitKey(40)
?將視頻數(shù)據錄制成多媒體文件
VideoWriter()??
write()
1秒多少幀,視頻的像素(寬和高)
release()? ?釋放資源,將磁盤中的數(shù)據輸出
VideoWriter()? 參數(shù):
參數(shù)1:為輸出文件位置
參數(shù)2:多媒體文件格式(VideoWriter_fourcc),fourcc所用編碼器,Windows系統(tǒng)采用DIVX編碼器
?參數(shù)3:幀率
參數(shù)4:分辨率大小,應為攝像頭實際分辨率
示例程序:
import cv2
#創(chuàng)建VideoWriter為寫多媒體文件
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
vw = cv2.VideoWriter("C:\\Users\\Mengyang\\Desktop\\out.mp4",fourcc,25,(640,480))
#
#創(chuàng)建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',300,300) #設置窗口大小
#獲取視頻設備
cap = cv2.VideoCapture(0)
#cap = cv2.VideoCapture("文件地址") 從文件獲取視頻
while True:
#從攝像頭讀視頻幀
ret,frame = cap.read()
#將視頻幀在窗口中顯示
cv2.imshow('video',frame)
#寫數(shù)據到多媒體文件
vw.write(frame)
key = cv2.waitKey(1) #不能為0,0為等待中斷,只能讀取到一幀的數(shù)據
if(key & 0xFF == ord('q')):
break
#釋放資源
cap.release() #釋放VideoCapture
vw.release() #釋放VideoWrite
cv2.destroyAllWindows() #釋放窗口資源
代碼優(yōu)化
問題1:顯示窗口為什么變大了?
在視頻幀在窗口顯示時重新設置一下窗口大小。
??
問題2:使用isOpened()判斷攝像頭是否已打開
問題3:采集數(shù)據時要判斷數(shù)據是否獲取到了
文章來源:http://www.zghlxwxcb.cn/news/detail-421720.html
優(yōu)化過的程序:文章來源地址http://www.zghlxwxcb.cn/news/detail-421720.html
import cv2
#創(chuàng)建VideoWriter為寫多媒體文件
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
vw = cv2.VideoWriter("C:\\Users\\Mengyang\\Desktop\\out.mp4",fourcc,25,(640,480))
#創(chuàng)建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',300,300) #設置窗口大小
#獲取視頻設備
cap = cv2.VideoCapture(0)
#cap = cv2.VideoCapture("文件地址") 從文件獲取視頻
while cap.isOpened(): #判斷攝像頭是否已打開,若打開返回值則為True
#從攝像頭讀視頻幀
ret,frame = cap.read()
if ret ==True : #判斷是否讀取到數(shù)據
#將視頻幀在窗口中顯示
cv2.imshow('video',frame)
cv2.resizeWindow('video',300,300) #重新設置窗口大小
#寫數(shù)據到多媒體文件
vw.write(frame)
key = cv2.waitKey(1) #不能為0,0為等待中斷,只能讀取到一幀的數(shù)據
if(key & 0xFF == ord('q')):
break
else:
break
#釋放資源
cap.release() #釋放VideoCapture
vw.release() #釋放VideoWrite
cv2.destroyAllWindows() #釋放窗口資源
到了這里,關于4.通過Opencv采集攝像頭視頻數(shù)據的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!