要點
- opencv常用讀視頻函數(shù) cv2.VideoCapture 、cv2.VideoCapture.get 等,可以參考這里
- opencv常用寫視頻函數(shù) cv2.VideoWriter 等可以參考這里 ,其中視頻格式可以參考這里
- videoCapture.read() 是按幀讀取視頻,ret,frame 是獲 .read() 方法的兩個返回值。其中 ret 是布爾值,如果讀取幀是正確的則返回True,如果文件讀取到結(jié)尾,它的返回值就為False。frame 就是每一幀的圖像,是個三維矩陣。
- 可以使用 cv2.putText 來添加文字,具體參數(shù)可以參考這里
代碼
例程一
- 本例程將讀取一個視頻,并個視頻加上流動水印后保存為一個新視頻。
import cv2
#讀取視頻并獲取視頻幀率、分辨率、總幀數(shù)
VideoCapture = cv2.VideoCapture("VideoExample.mp4")
fps = VideoCapture.get(cv2.CAP_PROP_FPS)
size = (int(VideoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(VideoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
totalFrames = int(VideoCapture.get(7))
#創(chuàng)建新視頻
ViideoWrite = cv2.VideoWriter("VideoWriterExample.avi",cv2.VideoWriter_fourcc('I','4','2','0'),
fps,size)
x=10 #水印坐標(biāo)
y=10 #水印坐標(biāo)
i=1
step_x=5
step_y=5
success,frame = VideoCapture.read() #讀取視頻第一幀
print("第"+str(i)+"幀, 共"+str(totalFrames)+"幀")
while success:
cv2.waitKey(1)
# 給圖片添加水印
cv2.putText(frame,'hello,opencv',(x,y),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),3)
cv2.imshow("frame",frame)
ViideoWrite.write(frame) #給新視頻添加新幀
# 水印坐標(biāo)變化
if(x>size[0]):step_x=-5
if(x<0):step_x=5
if(y>size[1]):step_y=-5
if(y<0):step_y=5
x += step_x
y += step_y
success,frame = VideoCapture.read()
i += 1
print("第"+str(i)+"幀, 共"+str(totalFrames)+"幀")
print ('Quitted!') #提示程序已停止
cv2.destroyAllWindows() #程序停止前關(guān)閉所有窗口
例程二
- 本例程將讀取并顯示攝像頭圖像,在圖像窗口按下按鍵“S”將開始錄制攝像頭視頻,按下按鍵“X”將停止錄制攝像頭視頻,按下按鍵“Q”將停止程序。
import cv2
#讀取視頻并獲取視頻幀率、分辨率
cameraCapture = cv2.VideoCapture(0)
fps = cameraCapture .get(5)
size = (int(cameraCapture .get(cv2.CAP_PROP_FRAME_WIDTH)),int(cameraCapture .get(cv2.CAP_PROP_FRAME_HEIGHT)),)
#創(chuàng)建新視頻
cameraWriter = cv2.VideoWriter("CameraExample.avi",cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)
x=10 #水印坐標(biāo)
y=10 #水印坐標(biāo)
i=1
step_x=5
step_y=5
#讀取視頻第一幀
success,frame = cameraCapture.read()
#提示停止方法
print ('Showing camera. Press key "Q" to quit.')
print ('Press key "S" to start recording.')
Quit=1 #是否繼續(xù)運行標(biāo)志位
Record=0 #錄制視頻標(biāo)志位
while success and Quit:
keycode=cv2.waitKey(1)
if keycode & 0xFF == ord('q'): #如果按下“Q”鍵,停止運行標(biāo)志位置1,跳出while循環(huán),程序停止運行
Quit = 0
if keycode & 0xFF == ord('s'): #如果按下“S”鍵,開始錄制攝像頭視頻
Record = 1
if keycode & 0xFF == ord('x'): #如果按下“X”鍵,停止錄制攝像頭視頻
Record = 0
if Record:
# 給圖片添加水印
cv2.putText(frame,'hello,opencv',(x,y),cv2.FONT_HERSHEY_SIMPLEX,3,(0,255,255),3)
cameraWriter.write(frame)# 給新視頻添加新幀
# 水印坐標(biāo)變化
if x > size[0]:
step_x = -5
if x < 0:
step_x = 5
if y > size[1]:
step_y = -5
if y < 0:
step_y = 5
x += step_x
y += step_y
print("第" + str(i) + "幀,")
i = i + 1
print('Press key "X" to end recording.')
print("\n\t")
cv2.imshow('frame',frame)
success,frame = cameraCapture.read() # 逐幀讀取視頻
if success == 0: #提示由于攝像頭讀取失敗停止程序
print ('Camera disconnect !')
print('Quitted!') # 提示程序已停止
#釋放攝像頭
cameraCapture.release()
#程序停止前關(guān)閉所有窗口
cv2.destroyAllWindows()
文章來源地址http://www.zghlxwxcb.cn/news/detail-402398.html
文章來源:http://www.zghlxwxcb.cn/news/detail-402398.html
到了這里,關(guān)于opencv基本操作二(讀取視頻流與保存視頻、讀取攝像頭并保存視頻)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!