日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

Python利用VideoCapture讀取視頻或攝像頭并進行保存_python

作者:AI算法聯(lián)盟 ? 更新時間: 2022-08-23 編程語言

一、語法:cap = cv2.VideoCapture(0)

說明:參數(shù)0表示默認為筆記本的內(nèi)置第一個攝像頭,如果需要讀取已有的視頻則參數(shù)改為視頻所在路徑路徑,例如:cap=cv2.VideoCapture('video.mp4')

二、語法:cap.isOpened()

說明:判斷視頻對象是否成功讀取,成功讀取視頻對象返回True。

三、語法:ret,frame = cap.read()

說明:按幀讀取視頻,返回值ret是布爾型,正確讀取則返回True,讀取失敗或讀取視頻結(jié)尾則會返回False。frame為每一幀的圖像,這里圖像是三維矩陣,即frame.shape = (640,480,3),讀取的圖像為BGR格式。

四、語法:key = cv2.waitKey(1)

說明:等待鍵盤輸入,參數(shù)1表示延時1ms切換到下一幀,參數(shù)為0表示顯示當(dāng)前幀,相當(dāng)于暫停。

五、讀取攝像頭并保存為視頻代碼演示

import cv2
 
def videocapture():
    cap=cv2.VideoCapture(0)     #生成讀取攝像頭對象
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  #獲取視頻的寬度
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  #獲取視頻的高度
    fps = cap.get(cv2.CAP_PROP_FPS) #獲取視頻的幀率
    fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))    #視頻的編碼
    #定義視頻對象輸出
    writer = cv2.VideoWriter("video_result.mp4", fourcc, fps, (width, height))
    while cap.isOpened():
        ret, frame = cap.read() #讀取攝像頭畫面
        cv2.imshow('teswell', frame) #顯示畫面
        key = cv2.waitKey(24)
        writer.write(frame)  #視頻保存
        # 按Q退出
        if key == ord('q'):
            break
    cap.release()         #釋放攝像頭
    cv2.destroyAllWindows() #釋放所有顯示圖像窗口
 
if __name__ == '__main__' :
 
    videocapture()

六、讀取視頻并按幀進行保存代碼演示:

import numpy as np
import cv2
import os
 
def video2image(video_dir,save_dir):
    cap = cv2.VideoCapture(video_dir) #生成讀取視頻對象
    n = 1   #計數(shù)
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))    #獲取視頻的寬度
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))   #獲取視頻的高度
    fps = cap.get(cv2.CAP_PROP_FPS)    #獲取視頻的幀率
    fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))    #視頻的編碼
    # 定義視頻輸出
    #writer = cv2.VideoWriter("teswellvideo_02_result.mp4", fourcc, fps, (width, height))
    i = 0
    timeF = int(fps)     #視頻幀計數(shù)間隔頻率
    while cap.isOpened():
        ret,frame = cap.read() #按幀讀取視頻
        #到視頻結(jié)尾時終止
        if ret is False :
            break
        #每隔timeF幀進行存儲操作
        if (n % timeF == 0) :
            i += 1
            print('保存第 %s 張圖像' % i)
            save_image_dir = os.path.join(save_dir,'%s.jpg' % i)
            print('save_image_dir: ', save_image_dir)
            cv2.imwrite(save_image_dir,frame) #保存視頻幀圖像
        n = n + 1
        cv2.waitKey(1) #延時1ms
    cap.release() #釋放視頻對象
 
#讀取文件夾所有視頻,每個視頻按幀保存圖像
def video2image_multi(video_path,save_path):
    video_list = os.listdir(video_path)
    
    for i in range(len(video_list)) :      
        video_dir = os.path.join(video_path,video_list[i])
        cap = cv2.VideoCapture(video_dir)
        fps = cap.get(cv2.CAP_PROP_FPS)     # 視頻的幀率
        save_num = 0
        n = 1           #計數(shù)
        timeF = int(fps)          # 視頻幀計數(shù)間隔頻率
        while cap.isOpened():
            ret,frame = cap.read()
            if ret is False :
                break
            #每隔timeF幀進行存儲操作
            if (n % timeF == 0) :
                save_num += 1
                save_image_dir = os.path.join(save_path,'%s_%s.jpg' % (i,save_num))
                cv2.imwrite(save_image_dir,frame)
            n = n + 1
            cv2.waitKey(1)
        cap.release()
        print('讀取第 %s 個視頻完成 !!!' % i)
 
if __name__ == '__main__' :
 
    video_to_image(r'E:\AI\video.mp4', r'E:\AI\video2image')

原文鏈接:https://blog.csdn.net/weixin_40922285/article/details/102967331

欄目分類
最近更新