import cv2
if __name__ == "__main__":
video_name = "video.ts"
vc = cv2.VideoCapture(video_name) # 讀入視頻文件
video_len = int(vc.get(cv2.CAP_PROP_FRAME_COUNT)) # 視頻總幀數
video_width = int(vc.get(cv2.CAP_PROP_FRAME_WIDTH)) # 視頻寬度
video_height = int(vc.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 視頻高度
video_fps = int(vc.get(cv2.CAP_PROP_FPS)) # 視頻幀率
print(video_len, video_width, video_height, video_fps)
if vc.isOpened(): # 判斷是否正常打開
rval, frame = vc.read()
else:
rval = False
ind = 1
timeF = 1 # 視頻幀計數間隔頻率
while rval: # 循環讀取視頻幀
rval, frame = vc.read()
if (ind % timeF == 0): # 每隔timeF幀進行存儲操作
cv2.imwrite('image/' + str(ind) + '.jpg', frame) # 存儲爲圖像
# frame = cv2.resize(frame, (800, 800)) # 對圖像進行resize
cv2.imshow("Image", frame)
ind = ind + 1
# print(ind)
cv2.waitKey(1)
vc.release()
上述代碼是用來讀取視頻中數據,可以進行單幀圖像顯示與保存,其中使用 vc.get()
,將括號內的目標屬性放入後就可以得到相應的結果,具體的屬性可以參考下邊表格。
視頻屬性 | 屬性說明 |
---|---|
cv2.CAP_PROP_POS_MSEC | 視頻文件的當前位置(ms) |
cv2.CAP_PROP_POS_FRAMES | 從0開始索引幀,幀位置。 |
cv2.CAP_PROP_POS_AVI_RATIO | 視頻文件的相對位置(0表示開始,1表示結束) |
cv2.CAP_PROP_FRAME_WIDTH | 視頻流的幀寬度。 |
cv2.CAP_PROP_FRAME_HEIGHT | 視頻流的幀高度。 |
cv2.CAP_PROP_FPS | 幀率 |
cv2.CAP_PROP_FOURCC | 編解碼器四字符代碼 |
cv2.CAP_PROP_FRAME_COUNT | 視頻文件的幀數 |
cv2.CAP_PROP_FORMAT | retrieve()返回的Mat對象的格式。 |
cv2.CAP_PROP_MODE | 後端專用的值,指示當前捕獲模式 |
cv2.CAP_PROP_BRIGHTNESS | 圖像的亮度,僅適用於支持的相機 |
cv2.CAP_PROP_CONTRAST | 圖像對比度,僅適用於相機 |
cv2.CAP_PROP_SATURATION | 圖像飽和度,僅適用於相機 |
cv2.CAP_PROP_HUE | 圖像色調,僅適用於相機 |
cv2.CAP_PROP_GAIN | 圖像增益,僅適用於支持的相機 |
cv2.CAP_PROP_EXPOSURE | 曝光,僅適用於支持的相機 |
cv2.CAP_PROP_CONVERT_RGB | 布爾標誌,指示是否應將圖像轉換爲RGB |