當然還可以從視頻中抓取截圖,所以現(xiàn)在聊一下常用的抓取視頻截圖的的方法。
VideoCapture 方法
cv2.VideoCapture();
cv2.VideoCapture( device);
cv2.VideoCapture(filename);
上面有三種構(gòu)造方法,
-
第一種是無法構(gòu)造方法。
-
第二種參數(shù)device是一個數(shù)字。
一般筆記本如此寫cv2.VideoCapture(0); 因為默認是0 ,如果有多個攝像頭,就需要看設(shè)置的攝像頭代表的數(shù)字了。
-
第二種參數(shù)device是一個字符串。
其代表是從視頻文件種得到幀。
release 方法
釋放資源的方法:
cap = cv2.VideoCapture();
cap.release()
read 方法
read方法就是讀取視頻的幀的方法。
cap = cv2.VideoCapture();
cap.read()
- read() 方法返回的有兩個值
- 第一個值:為狀態(tài)值,讀到幀就是true
- 第二個值:返回的視頻幀,通俗的說就是圖片
來一個例子:
import cv2
Cap = cv2.VideoCapture("1.mp4");
flag,phto= Cap.read();
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
cv2.imshow("Wind",phto)
key=cv2.waitKey(0)
if key=="q":
cv2.destroyWindow()
Cap.release()
但是如果觀察效果的話,會發(fā)現(xiàn)這是窗口只有鏡頭內(nèi)容。
所以需要用一個while循環(huán)
import cv2
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
while True:
flag, phto = Cap.read();
if flag:
cv2.imshow("Wind",phto)
key=cv2.waitKey(1)
if(key & 0xFF == ord('q')):
break
else:
break
Cap.release()
#釋放VideoWriter
Cap.release()
cv2.destroyAllWindows()
isOpened方法
這個方法是判斷攝像頭和文件是發(fā)可以正常打開,返回True 或 False:
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
# 可以使用判斷是否攝像頭打開 作為標識符值
Cap.isOpened()
可以讀取文件的方法修改為:
import cv2
# 如果是通過攝像頭的話
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
# Cap.isOpened(): 可以使用判斷是否攝像頭打開 以及文件是否可以正常打開
while Cap.isOpened():
flag, phto = Cap.read();
if flag:
cv2.imshow("Wind",phto)
# cv2.resizeWindow("Wind", 1920, 1080)
key=cv2.waitKey(1)
if(key & 0xFF == ord('q')):
break
else:
break
Cap.release()
#釋放VideoWriter
Cap.release()
cv2.destroyAllWindows()
補充
這里補充一點 如果再循環(huán)外:
cv2.resizeWindow("Wind", 1920, 1080)
只會在循環(huán)種呈現(xiàn)一次,如果真的需要,那就行說在循環(huán)體內(nèi)再寫一遍。
VideoWriter方法
有時候,打開攝像頭等,需要將內(nèi)容保存到本地,所以就需要這個方法:
如下:
cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
-
filename
(必選):要寫入的視頻文件的名稱。 -
fourcc
(必選):用于指定視頻編解碼器的4個字符代碼。例如,'MJPG’表示Motion JPEG編碼。fourcc = cv2.VideoWriter_fourcc(*'MJPG')
-
fps
(必選):視頻的幀率,以每秒幀數(shù)(FPS)為單位。 -
frameSize
(必選):視頻幀的大小,以像素為單位。 -
isColor
(可選):一個布爾值,指示是否使用彩色。如果為True,則使用彩色,否則為灰度。
filename = 'tang1.avi'
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
fps = 30.0
frameSize = (640, 480)
isColor = True
# 創(chuàng)建VideoWriter對象
out = cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
不過這個等于創(chuàng)建了個對象,還需要進入寫入,所以需要在用如下方法:文章來源:http://www.zghlxwxcb.cn/news/detail-707502.html
#frame = cv2.imread('frame.jpg') 或者是視頻 flag, frame = Cap.read();
out.write(frame)
結(jié)合如下寫:文章來源地址http://www.zghlxwxcb.cn/news/detail-707502.html
import cv2
# 如果是通過攝像頭的話
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
filename = 'tang1.avi'
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
fps = 30.0
frameSize = (640, 480)
isColor = True
# 創(chuàng)建VideoWriter對象
out = cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
# cv2.resizeWindow("Wind", 1920, 1080)
# Cap.isOpened(): 可以使用判斷是否攝像頭打開 以及文件是否可以正常打開
while Cap.isOpened():
flag, frame = Cap.read();
if flag:
cv2.imshow("Wind",phto)
out.write(frame)
# cv2.resizeWindow("Wind", 1920, 1080)
key=cv2.waitKey(1)
if(key & 0xFF == ord('q')):
break
else:
break
Cap.release()
#釋放VideoWriter
Cap.release()
cv2.destroyAllWindows()
到了這里,關(guān)于opencv基礎(chǔ): 視頻,攝像頭讀取與保存的常用方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!