python-opencv 讀取攝像頭並保存為.mp4視頻 及 VideoCapture()的使用


import cv2
import sys
import time

dt = "2019-01-23 15:29:00"
#轉換成時間數組
timeArray = time.strptime(dt, "%Y-%m-%d %H:%M:%S")
#轉換成時間戳
timestamp = time.mktime(timeArray)
print(timeArray)
print(timestamp)


cap_1 = cv2.VideoCapture(1)
cap_1.set(3,1920)
cap_1.set(4,1080)
# cap_2 = cv2.VideoCapture(2)
# cap_3 = cv2.VideoCapture(3)
# cap_4 = cv2.VideoCapture(4)

write_ok = False

sz = (int(cap_1.get(cv2.CAP_PROP_FRAME_WIDTH)),
        int(cap_1.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fps = 30
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
# fourcc = cv2.VideoWriter_fourcc(*'mpeg')


vout_1 = cv2.VideoWriter()
vout_1.open('./1/output.mp4',fourcc,fps,sz,True)
# vout_2 = cv2.VideoWriter()
# vout_2.open('./2/output.mp4',fourcc,fps,sz,True)
# vout_3 = cv2.VideoWriter()
# vout_3.open('./3/output.mp4',fourcc,fps,sz,True)


cnt = 0
while(True):
    if(write_ok):
        # print("video")
        #獲取當前時間
        time_now = int(time.time())
        #轉換成localtime
        # time_local = time.localtime(time_now)
        print(time_now)
        if time_now >= timestamp:
            while(cnt < 900):
                cnt += 1
                print(cnt)

                ret_1, frame_1 = cap_1.read()
                vout_1.write(frame_1)

                # ret_2, frame_2 = cap_2.read()
                # vout_2.write(frame_2)

                # ret_3, frame_3 = cap_3.read()
                # vout_3.write(frame_3)

            vout_1.release()
            # vout_2.release()
            # vout_3.release()
            sys.exit()
    else:
        print("stop")
        ret_1, frame_1 = cap_1.read()
        cv2.imshow("cam_1", frame_1)
        # ret_2, frame_2 = cap_2.read()
        # cv2.imshow("cam_2", frame_2)
        # ret_3, frame_3 = cap_3.read()
        # cv2.imshow("cam_3", frame_3)



    if cv2.waitKey(1) & 0xFF==ord("w"):
        write_ok = write_ok is not True

VideoCapture()的使用 

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# @Time    : 19-4-21 上午10:31
# @Author  : chen

"""
VideoCapture()的使用
"""
import cv2
import argparse
import os
import pdb

ap = argparse.ArgumentParser()
ap.add_argument("-v", "--videoPath", default="./video_1.mp4", help="path to input video")
ap.add_argument("-o", "--outputPath", default="grabImages", help="path to output frames")

args = vars(ap.parse_args())

# 初始化,並讀取第一幀
# rval表示是否成功獲取幀
# frame是捕獲到的圖像
vc = cv2.VideoCapture(args["videoPath"])
rval, frame = vc.read()

# 獲取視頻fps
fps = vc.get(cv2.CAP_PROP_FPS)
# 獲取視頻總幀數
frame_all = vc.get(cv2.CAP_PROP_FRAME_COUNT)
print("[INFO] 視頻FPS: {}".format(fps))
print("[INFO] 視頻總幀數: {}".format(frame_all))
print("[INFO] 視頻時長: {}s".format(frame_all/fps))

outputPath = os.path.sep.join([args["outputPath"]])
if os.path.exists(outputPath) is False:
    print("[INFO] 創建文件夾,用於保存提取的幀")
    os.mkdir(outputPath)

# 每隔100幀保存一張圖片
frame_interval = 100
# 統計當前幀
frame_count = 1
# 保存圖片個數
count = 0
while rval:
    rval, frame = vc.read()
    if frame_count % frame_interval == 0:
        filename = os.path.sep.join([outputPath, "test_{}.jpg".format(count)])
        cv2.imwrite(filename, frame)
        count += 1
        print("保存圖片:{}".format(filename))
    frame_count += 1

# 關閉視頻文件
vc.release()
print("[INFO] 總共保存:{}張圖片".format(count))

 


免責聲明!

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



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