Python提取視頻中的幀圖片


#coding=utf-8
import os
import cv2

def save_img():           #提取視頻中圖片 按照每幀提取
    video_path = r'F:\\redundance\\'    #視頻所在的路徑
    f_save_path = 'F:\\image1\\'        #保存圖片的上級目錄
    videos = os.listdir(video_path)   #返回指定路徑下的文件和文件夾列表。
    for video_name in videos:         #依次讀取視頻文件
        file_name = video_name.split('.')[0]    #拆分視頻文件名稱 ,剔除后綴
        folder_name = f_save_path + file_name     #保存圖片的上級目錄+對應每條視頻名稱 構成新的目錄存放每個視頻的
        os.makedirs(folder_name,exist_ok=True)      #創建存放視頻的對應目錄
        vc = cv2.VideoCapture(video_path+video_name) #讀入視頻文件
        c=0                    #計數  統計對應幀號
        rval=vc.isOpened()      #判斷視頻是否打開  返回True或Flase

        while rval:   #循環讀取視頻幀
            rval, frame = vc.read()     #videoCapture.read() 函數,第一個返回值為是否成功獲取視頻幀,第二個返回值為返回的視頻幀:
            pic_path = folder_name+'/'
            if rval:
                cv2.imwrite(pic_path + file_name + '_' + str(c) + '.jpg', frame) #存儲為圖像,保存名為 文件夾名_數字(第幾個文件).jpg
                cv2.waitKey(1)  #waitKey()--這個函數是在一個給定的時間內(單位ms)等待用戶按鍵觸發;如果用戶沒有按下 鍵,則接續等待(循環)
                c = c + 1
            else:
                break
        vc.release()
        print('save_success'+folder_name)

save_img()

def save_img2():               #提取視頻中圖片 按照每秒提取   間隔是視頻幀率
    video_path = r'F:\\redundance\\'    #視頻所在的路徑
    f_save_path = 'F:\\image1\\'        #保存圖片的上級目錄
    videos = os.listdir(video_path)   #返回指定路徑下的文件和文件夾列表。
    for video_name in videos:         #依次讀取視頻文件
        file_name = video_name.split('.')[0]    #拆分視頻文件名稱 ,剔除后綴
        folder_name = f_save_path + file_name     #保存圖片的上級目錄+對應每條視頻名稱 構成新的目錄存放每個視頻的
        os.makedirs(folder_name,exist_ok=True)      #創建存放視頻的對應目錄
        vc = cv2.VideoCapture(video_path+video_name) #讀入視頻文件
        fps = vc.get(cv2.CAP_PROP_FPS)   #獲取幀率
        print(fps)    #幀率可能不是整數  需要取整
        rval=vc.isOpened()      #判斷視頻是否打開  返回True或Flase
        c = 1
        while rval:  # 循環讀取視頻幀
            rval, frame = vc.read()  # videoCapture.read() 函數,第一個返回值為是否成功獲取視頻幀,第二個返回值為返回的視頻幀:
            pic_path = folder_name + '/'
            if rval:
                
                if (c % round(fps) == 0):  # 每隔fps幀進行存儲操作   ,可自行指定間隔
                    cv2.imwrite(pic_path + file_name + '_' + str(c) + '.jpg', frame)  # 存儲為圖像,保存名為 文件夾名_數字(第幾個文件).jpg
                cv2.waitKey(1)  # waitKey()--這個函數是在一個給定的時間內(單位ms)等待用戶按鍵觸發;如果用戶沒有按下 鍵,則接續等待(循環)
                c = c + 1
            else:
                break
        vc.release()
        print('save_success' + folder_name)

save_img2()

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM