[opencv]5.获取视频流并保存到本地

本文介绍如何利用OpenCV从摄像头获取视频流,并将其保存到本地文件。通过提供的代码示例,读者可以了解到具体的实现过程。

本文的目标就是实现获取摄像头视频流并且保存到本地。
代码如下:

#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char* argv[])
{
    VideoCapture cap(0); //打开摄像头

    if (!cap.isOpened())  
    {
        cout << "ERROR: Cannot open the video file" << endl;
        return -1;
    }

    namedW
在Java中使用OpenCV从网络摄像头获取视频流将其保存本地文件,你需要包含OpenCV的Java库,创建一个简单的循环来读取帧写入文件。下面是一个基本的示例代码,假设网络摄像头的URL已经准备好: 首先,确保你的项目已包含OpenCV的Java依赖,例如通过Maven或Gradle添加如下依赖: **Maven:** ```xml <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacpp-presets-opencv</artifactId> <version>4.5.4-1.6.3</version> </dependency> ``` **Gradle:** ```groovy implementation 'org.bytedeco:javacpp-presets-opencv:4.5.4-1.6.3' ``` 现在,我们创建一个名为`NetworkCameraRecorder.java`的类: ```java import org.bytedeco.opencv.opencv_core.*; import org.bytedeco.opencv.opencv_videoio.*; import java.io.FileOutputStream; import java.io.IOException; public class NetworkCameraRecorder { private static final String CAMERA_URL = "http://your-camera-url/stream.mjpg"; // 替换为实际摄像头地址 private VideoCapture camera; private FileOutputStream fileOutputStream; private Mat frame; public void startRecording(String outputFile) { try { camera = new VideoCapture(CAMERA_URL); camera.set(CAP_PROP_BUFFERSIZE, 1); // 设置缓冲大小,减少延迟 camera.set(CAP_PROP_FRAME_WIDTH, 640); // 设置视频尺寸,可以根据需要调整 camera.set(CAP_PROP_FRAME_HEIGHT, 480); fileOutputStream = new FileOutputStream(outputFile); VideoWriter videoWriter = new VideoWriter(outputFile, VideoWriter.FOURCC('M', 'J', 'P', 'G'), camera.get(CAP_PROP_FPS), (int) camera.get(CAP_PROP_FRAME_WIDTH), (int) camera.get(CAP_PROP_FRAME_HEIGHT)); while (camera.isOpened()) { Mat frameRead = new Mat(); camera.read(frameRead); if (!frameRead.isEmpty()) { // 将帧转换为BGR写入文件 Imgcodecs.imencode(".avi", frameRead, frame); videoWriter.write(frame); fileOutputStream.write(frame.data, 0, frame.step[0]); } else { System.out.println("Failed to read frame from camera."); } // 稍微等待,以便下一次读取 Thread.sleep(1000 / 30); // 控制帧率,这里假设30fps } camera.release(); videoWriter.release(); fileOutputStream.close(); } catch (IOException | InterruptedException | RuntimeException e) { e.printStackTrace(); } } } ``` 在这个例子中,你可以实例化`NetworkCameraRecorder`,然后调用`startRecording()`方法来开始录制: ```java NetworkCameraRecorder recorder = new NetworkCameraRecorder(); recorder.startRecording("output.avi"); // 输出文件名 ``` 请注意,由于网络摄像头的连接可能会不稳定,这段代码可能需要适当的错误处理和重试机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值