Ubuntu系统VScode实现opencv(c++)视频及摄像头使用

发布于:2025-08-03 ⋅ 阅读:(16) ⋅ 点赞:(0)

在计算机视觉系统中,视频流与摄像头输入作为图像数据的重要来源,广泛应用于实时监控、目标跟踪、人机交互以及智能驾驶等领域。相比于静态图像处理,视频数据具有时间连续性和动态变化的特点,因而更具挑战性,也更贴近实际应用场景。利用编程接口获取摄像头图像或读取视频文件,可以实现对每一帧图像的逐帧分析与处理,为后续的视觉任务(如检测、识别、跟踪等)提供实时支持。OpenCV 提供了高效简洁的接口用于视频捕获与写入,支持多种平台和设备,使得从实时摄像头或预录制视频中提取、处理、展示图像序列成为可能。

 代码实现:

void Demo::video_Demo(Mat &image)
{
    VideoCapture capture(0);
    Mat frame;
    while (1)
    {
        capture.read(frame);
        if (frame.empty())break;
        // Do something
        flip(frame,frame,1);
        imshow("video",frame);
        int c = waitKey(1);
        if (c == 27){
            capture.release();//释放摄像头
            break; 
        }
    }
}

首先,创建一个视频捕获对象 capture ,参数 0 表示打开默认摄像头(通常是笔记本的内置摄像头)。

其次定义一个空的图像容器 frame,用于存储每一帧读取到的图像数据。capture.read() 会将摄像头读取的一帧图像存储到 frame 中。

 flip(frame, frame, 1);

对图像进行水平翻转(镜像)。

capture.release();//释放摄像头在推出是必要的。运行看结果:

视频也只是改变一个参数即可:只需要将0,换成视频路径。

VideoCapture capture("/home/xlh/视频/录屏/录屏 2025年08月02日 21时48分05秒.webm");

 

其次我们可以对每一帧率的图像进行处理,达到对整个视频的处理。这里我调用一个之前的Demo

 代码如下: 


void Demo::colorspace_Demo(Mat &image)
{
    Mat gray,hsv;
    cvtColor(image,hsv,COLOR_BGR2HSV);
    cvtColor(image,gray,COLOR_BGRA2GRAY);
    imshow("gray",gray);
    imshow("hsv",hsv);
}


void Demo::video_Demo(Mat &image)
{
    VideoCapture capture("/home/xlh/视频/录屏/录屏 2025年08月02日 21时48分05秒.webm");
    Mat frame;
    while (1)
    {
        capture.read(frame);
        if (frame.empty())break;
        // Do something

        flip(frame,frame,1);
        colorspace_Demo(frame);

        int c = waitKey(10);
        if (c == 27){
            break; 
            capture.release();//释放摄像头
        }
    }
}