OpenCV 讀取影片
import cv2 # 匯入函式
video = cv2.VideoCapture(0) # 讀取攝影鏡頭
if not video.isOpened(): # 判斷影片是否正常開啟
print("Cannot open camera")
exit()
while True:
ret, frame = video.read() # 讀取影片的每一個影格
if not ret:
print("Cannot receive frame") # 如果讀取錯誤,印出訊息
break
cv2.imshow('OpenCVTest', frame) # 如果讀取成功,顯示該影格的畫面
if cv2.waitKey(1) == ord('q'): # 每一毫秒更新一次,直到按下 q 結束
break
video.release() # 所有作業都完成後,釋放資源
cv2.destroyAllWindows() # 結束所有視窗
VideoCapture() 讀取影片
※語法參照
VideoCapture() 有一個多載參數,如果參數指定「影片路徑」,可以開啟電腦影片;如果參數指定「0、1、2...」數字,則會開啟攝影鏡頭讀取影像畫面。
isOpened() 判斷影片是否正常開啟
※語法參照
使用 VideoCapture 之後,通常會再透過
'影片變數'.isOpened()
來判斷影片是否正常開啟,如果正常開啟會回傳 True,否則回傳 False。
read() 讀取影片的每一個影格
※語法參照
順利開啟影片後,就能使用 '影片變數'.read() 的方法讀取影片的每一個影格,讀取後會回傳兩個值,第一個值 ret 為 True 或 False:表示順利讀取或讀取錯誤;第二個值表示讀取到影片某一影格的畫面,如果讀取成功,就能透過 imshow() 的方法,將該影格的畫面顯示出來,搭配 waitKey(1) 方法就能不斷更新顯示的圖片,看起來就像播放影片一般。
cvtColor() 改變影片色彩
※語法參照
cvtColor() 方法可以改變圖片的色彩,將影片每一個影格的圖片套用 cvtColor(),最後就會呈現的改變顏色的影片。
OpenCV 變更影片大小
import cv2 # 匯入函式
video = cv2.VideoCapture('newuser.mp4') # 讀取攝影鏡頭
if not video.isOpened(): # 判斷影片是否正常開啟
print("Cannot open camera")
exit()
while True:
ret, frame = video.read() # 讀取影片的每一個影格
if not ret:
print("Cannot receive frame") # 如果讀取錯誤,印出訊息
break
frame = cv2.resize(frame, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA) # 調整大小
cv2.imshow('OpenCVTest', frame) # 如果讀取成功,顯示該影格的畫面
if cv2.waitKey(1) == ord('q'): # 每一毫秒更新一次,直到按下 q 結束
break
video.release() # 所有作業都完成後,釋放資源
cv2.destroyAllWindows() # 結束所有視窗
cv2.resize() 調整大小
※語法參照
https://shengyu7697.github.io/python-opencv-resize/
由快到慢排序:INTER_NEAREST > INTER_CUBIC > INTER_LINEAR > INTER_AREA > INTER_LANCZOS4'
每次跑的結果都不太一樣,但整體速度排序來說差不多。
如果是要縮小圖片的話,通常 INTER_AREA 使用效果較佳。
如果是要放大圖片的話,通常 INTER_CUBIC 使用效果較佳,次等則是 INTER_LINEAR。
如果要追求速度的話,通常使用 INTER_NEAREST。
src:輸入圖像
dsize:輸出圖像的大小。
如果該參數為 0,表示縮放之後的大小需要通過公式計算,dsize = Size(round(fx*src.cols),round(fy*src.rows))。其中 fx 與 fy 是圖像 Width 方向和 Height 方向的縮放比例。
fx:Width 方向的縮放比例,如果是 0,按照 dsize * width/src.cols 計算
fy:Height 方向的縮放比例,如果是 0,按照 dsize * height/src.rows 計算
interpolation:插值算法類型,或者叫做插值方式,默認為雙線性插值