cv2讀視頻文件取幀圖片

希望通過cv2.VideoCapture類截取視頻幀圖片,期間只能截取視頻的每幀圖片,不能跳幀截取圖片,原來是在讀取視頻幀的時候沒有寫入ret, frame = cv2.VideoCapture.read()。

    ret, frame = cv2.VideoCapture.read()函數輸出的是兩個參數,第一個參數ret 爲True 或者False,代表有沒有讀取到圖片;第二個參數frame表示截取到一幀的圖片。

修改前代碼(只能逐幀逐幀截取視頻幀圖片):

import cv2
import os
def save_img():
    video_path = r'你的視頻絕對路徑'
    videos = os.listdir(video_path)
    for video_name in videos:
        file_name = video_name.split('.')[0]
        folder_name =  file_name
        os.makedirs(folder_name,exist_ok=True)
        vc = cv2.VideoCapture(video_path+video_name) #讀入視頻文件
        c = 1
        if vc.isOpened():  # 判斷是否正常打開
            rval, frame = vc.read()
        else:
            rval = False
 
        timeF = 300  # 視頻幀計數間隔頻率
 
        while rval:  # 循環讀取視頻幀
            pic_path = folder_name + '/'
            if (c % timeF == 0):  # 每隔timeF幀進行存儲操作
                cv2.imwrite(pic_path + file_name + '_' + str(c) + '.jpg', frame)#存儲圖像
            c = c + 1
            cv2.waitKey(1)
        vc.release()
save_img()

修改後代碼(能夠跳幀截取視頻幀):

import cv2
import os
def save_img():
    video_path = r'D:\python3-PycharmProjects1\video2picture\20180911-12-48-31\data\123/'
    videos = os.listdir(video_path)
    for video_name in videos:
        file_name = video_name.split('.')[0]
        folder_name =  file_name
        os.makedirs(folder_name,exist_ok=True)
        vc = cv2.VideoCapture(video_path+video_name) #讀入視頻文件
        c = 1
        if vc.isOpened():  # 判斷是否正常打開
            rval, frame = vc.read()
        else:
            rval = False
 
        timeF = 300  # 視頻幀計數間隔頻率
 
        while rval:  # 循環讀取視頻幀
            rval, frame = vc.read()
            pic_path = folder_name + '/'
            if (c % timeF == 0):  # 每隔timeF幀進行存儲操作
                cv2.imwrite(pic_path + file_name + '_' + str(c) + '.jpg', frame)  # 存儲爲圖像,保存名爲 文件夾名_數字(第幾個文件).jpg
            c = c + 1
            cv2.waitKey(1)
        vc.release()
save_img()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章