【录相】如何调用笔记本的摄像头进行录相并进行截图

import cv2
cap = cv2.VideoCapture(0)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height =int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

fourcc = cv2.VideoWriter_fourcc(*"XVID")
out= cv2.VideoWriter("123.avi",fourcc,20.0,(width,frame_height))


while (cap.isOpened()):
    ret,frame = cap.read()
    if ret:
        out.write(frame)
        if cv2.waitKey(1)==ord("s"):
            cv2.imwrite("456.jpg",frame)
            print("保存图片成功")
        cv2.imshow("frame",frame)
        if cv2.waitKey(1)& 0xff == ord("q"):
            break
    else:
        break
cap.release()
out.release()
cv2.destroyAllWindows()

以下是对这段 Python 代码的分析:

代码功能概述

这段代码主要实现了使用 OpenCV 库从摄像头获取视频流,将视频流保存为一个.avi格式的视频文件,同时还提供了在按下特定按键时截取当前帧保存为图片的功能。

代码详细解读

  1. 导入库与初始化摄像头

import cv2
cap = cv2.VideoCapture(0)

cv2(OpenCV 库),然后通过cv2.VideoCapture(0)初始化摄像头,参数0表示使用默认的摄像头设备(如果有多个摄像头,可以更改参数来选择不同的摄像头)。
2. 获取视频帧尺寸

width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height =int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

利用cap.get()函数分别获取摄像头捕获的视频帧的宽度和高度信息,并将其转换为整数类型,后续用于设置要保存的视频文件的尺寸参数。
3. 设置视频写入器

fourcc = cv2.VideoWriter_fourcc(*"XVID")
out= cv2.VideoWriter("123.avi",fourcc,20.0,(width,frame_height))
  • cv2.VideoWriter_fourcc(*"XVID") :用于指定视频编码格式,这里选择的是XVID编码格式,它是一种常用的、能在很多平台上兼容播放的编码格式。
  • cv2.VideoWriter() :创建一个VideoWriter对象,用于将视频帧写入到指定的视频文件中。参数依次为要保存的视频文件名(这里是"123.avi")、视频编码格式、帧率(这里设置为20.0帧每秒)以及视频帧的尺寸(即前面获取到的宽度和高度组成的元组(width, frame_height))。

  1. 视频流处理循环

while (cap.isOpened()):
    ret,frame = cap.read()
    if ret:
        out.write(frame)
        if cv2.waitKey(1)==ord("s"):
            cv2.imwrite("456.jpg",frame)
            print("保存图片成功")
        cv2.imshow("frame",frame)
        if cv2.waitKey(1)& 0xff == ord("q"):
            break
    else:
        break

  • 外层while循环通过cap.isOpened()判断摄像头是否正常打开,只要摄像头处于打开状态就持续循环处理视频帧。
  • 在循环内部,cap.read()函数从摄像头读取一帧视频,返回两个值,ret是一个布尔值,表示是否成功读取到帧,frame则是读取到的视频帧图像数据(如果retTrue)。
  • 当成功读取到帧(retTrue)时:
    • 首先通过out.write(frame)将当前帧写入到之前创建的视频文件中。
    • 接着通过cv2.waitKey(1)==ord("s")判断是否按下了键盘上的s键,如果按下了,则使用cv2.imwrite("456.jpg", frame)将当前帧保存为名为"456.jpg"的图片文件,并打印提示信息 “保存图片成功”。
    • 然后通过cv2.imshow("frame", frame)在一个名为"frame"的窗口中显示当前视频帧,方便实时查看摄像头捕获的画面。
    • 最后通过cv2.waitKey(1)& 0xff == ord("q")判断是否按下了键盘上的q键,如果按下了,则跳出循环,结束视频捕获和处理过程。
  • 如果retFalse,也就是没能成功读取到视频帧,那么直接跳出while循环。

  1. 资源释放与窗口关闭
cap.release()
out.release()
cv2.destroyAllWindows()

  • cap.release() :释放摄像头资源,结束对摄像头的占用。
  • out.release() :释放视频写入器相关资源,确保视频文件能正确保存和关闭。
  • cv2.destroyAllWindows() :关闭所有由cv2.imshow()创建的显示窗口。

总体来说,这段代码实现了基本的摄像头视频捕获、视频保存以及简单的截图功能,是一个很好的 OpenCV 应用示例的基础代码框架,可以基于它进一步扩展和完善相关功能。

Matlab是一种强大的数学计算软件,它也支持创建图形用户界(GUI)进行交互式操作,包括处理视频流。要利用Matlab的GUI来调用摄像头进行实时录像,你可以按照以下步骤操作: 1. **安装支持**:首先确保已经安装了Image Acquisition Toolbox,这是Matlab用于摄像头功能的基本工具。 2. **创建新GUIDE窗口**:打开MATLAB,选择“工具” -> “ GUIDE”,这会启动 GUIDE 工具,通过它你可以设计GUI界。 3. **添加视频组件**:在GUIDE中,从“Component Palette”中选择“VideoPlayer”,将其拖放到工作区。设置好视频播放区域大小、位置等属性。 4. **连接摄像头**:编写代码,在GUI的`OpeningFcn`回调函数中,初始化VideoReader对象指定摄像头设备(如`videoDevice('USB0')`),然后创建一个循环读取视频数据显示到VideoPlayer组件上。 ```matlab function out = OpeningFcn(hObject, eventdata, handles) % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Camera setup vidObj = videoinput('winvideo', 'USB0'); % 或其他设备名称 set(handles.videoPlayer, 'VideoObject', vidObj); start(vidObj); % Close camera on GUI close handles.ExitFcn = @(hObject, eventdata) delete(vidObj); end ``` 5. **开始/停止录制按钮**:你可以添加更多的按钮或菜单选项,比如点击录制按钮时,开启`VideoWriter`来保存视频。在按钮的`Callback`函数中实现视频文件的写入,在停止录制时关闭它。 6. **保存运行**:设计完成后,记得保存你的GUI返回MATLAB命令窗口运行它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青龙摄影

你的鼓励是我创作的动力,支持下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值