OpenCV-Python笔记(1)从摄像头中获取视频并保存

从摄像头捕获视频

要捕捉视频,需创建一个VideoCapture()对象,它的参数可以是设备索引或视频文件的名称。设备索引指定摄像头编号。0代表第一个摄像头、1代表第二个,以此类推。创建对象后,使用read()函数逐帧捕捉视频。最后需要释放对象。

保存视频

要保存视频,需创建一个VideoWriter()对象,指定输出文件名(例如:output.avi)。之后指定FourCC代码——FourCC是用于指定视频编解码器的4字节代码。接下来传递每秒帧数(fps)和帧大小。最后一个是isColor标志,如果它为True,编码器编码成彩色帧,否则编码成灰度帧。创建对象后,使用write()函数保存视频。最后需要释放对象。

FourCC is a 4-byte code used to specify the video codec. The list of available codes can be found in fourcc.org1. It is platform dependent.

官方教程

官方教程传送

代码整合

import cv2

## Copyright (c) 2020, Wenquan.Zhao. All rights reserved.

def Operations(frame):
    op1Frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    op2Frame = cv2.flip(frame,0)
    return op2Frame

def saveVideo(saveVideoPath):
    cap = cv2.VideoCapture(0)
    
    if cap.isOpened():
        print('[INFO]: Camera is opened!')
    else:
        cap.open()
        print('[INFO]: Camera is opened!')
        
    # Define the codec and create VideoWriter object
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter(saveVideoPath, fourcc, 20.0, (640,480))
    
    while(True):
        ret, frame = cap.read()
        if ret==True:
            # operations on the frame
            op2 = Operations(frame)
            # write the frame
            out.write(frame)
            # display the frame after operation
            cv2.imshow('frame', op2)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break
    # Release everything if job is finished
    cap.release()
    out.release()
    cv2.destroyAllWindows()

if __name__=="__main__":
    saveVideoPath = 'output.avi'
    saveVideo(saveVideoPath)

Reference


  1. fourcc ↩︎

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是基于OpenCV模块调用笔记摄像头Python代码,可以通过GUI界面获取视频流并将图像数据持久化到本地文件。 ```python import cv2 import tkinter as tk from tkinter import messagebox class CameraGUI: def __init__(self, video_source=0): self.cap = cv2.VideoCapture(video_source) self.root = tk.Tk() self.root.title("Camera GUI") self.root.protocol('WM_DELETE_WINDOW', self.close) self.canvas = tk.Canvas(self.root, width=self.cap.get(cv2.CAP_PROP_FRAME_WIDTH), height=self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) self.canvas.pack() self.btn_snapshot = tk.Button(self.root, text="Snapshot", command=self.snapshot) self.btn_snapshot.pack(anchor=tk.CENTER, expand=True) self.delay = 15 self.update() self.root.mainloop() def update(self): ret, frame = self.cap.read() if ret: self.photo = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) self.photo = cv2.resize(self.photo, (int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))) self.photo = self.photo.swapaxes(0, 1) self.photo = tk.PhotoImage(data=cv2.imencode('.png', self.photo)[1].tobytes()) self.canvas.create_image(0, 0, anchor=tk.NW, image=self.photo) self.root.after(self.delay, self.update) def snapshot(self): ret, frame = self.cap.read() if ret: cv2.imwrite("snapshot.png", frame) messagebox.showinfo("Snapshot", "Snapshot saved as snapshot.png") def close(self): self.cap.release() self.root.destroy() if __name__ == '__main__': CameraGUI() ``` 这段代码创建了一个名为`CameraGUI`的类,该类使用OpenCV模块调用笔记摄像头,并在GUI界面上实时显示视频流。用户可以通过点击“Snapshot”按钮将当前帧保存为本地文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值