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:插值算法類型,或者叫做插值方式,默認為雙線性插值