OpenCV视频I/O(8)视频采集类VideoCapture之从视频源中读取一帧图像函数read()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

抓取、解码并返回下一个视频帧。

cv::VideoCapture::read() 是 VideoCapture 类的一个成员函数,用于从视频源中读取一帧图像.

该方法/函数将 VideoCapture::grab()VideoCapture::retrieve() 结合在一个调用中。这是读取视频文件或从解码中捕获数据最方便的方法,并返回刚刚获取的帧。如果没有获取到帧(摄像头已断开连接,或者视频文件中没有更多的帧),该方法返回 false 并且函数返回空图像(使用 cv::Mat 时,可以通过 Mat::empty() 测试)。

注意

在 C API 中,函数 cvRetrieveFrame()cv.RetrieveFrame() 返回存储在视频捕获结构内部的图像。不允许修改或释放该图像!你可以使用 cvCloneImage 复制帧,然后对副本做任何你想做的事情。

函数原型

cpp 复制代码
virtual bool cv::VideoCapture::read	
(	
	OutputArray 	image
)	

参数

  • 参数[out] image 这里返回视频帧。如果没有获取到帧,则图像将是空的。

返回值

类型:bool

描述:返回值指示是否成功从视频源中读取了一帧图像。如果返回 true,则表示成功读取;如果返回 false,则表示读取失败,这可能是因为已经到达视频末尾或者出现了其他错误。

代码示例

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

int main()
{
    // 创建一个 VideoCapture 对象
    cv::VideoCapture cap;

    // 定义摄像头设备索引
    int cameraIndex = 0;  // 第一个摄像头设备

    // 尝试打开摄像头设备
    if ( !cap.open( cameraIndex, cv::CAP_ANY ) )
    {
        std::cout << "Failed to open camera at index: " << cameraIndex << std::endl;
        return -1;
    }

    // 检查是否成功打开了摄像头设备
    if ( !cap.isOpened() )
    {
        std::cout << "Error opening camera at index: " << cameraIndex << std::endl;
        return -1;
    }

    // 循环读取并显示视频帧
    while ( true )
    {
        // 创建一个 Mat 对象来存储视频帧
        cv::Mat frame;

        // 从视频流中读取下一帧
        if ( !cap.read( frame ) )
        {
            std::cout << "No frame grabbed." << std::endl;
            break;
        }

        // 检查是否成功读取到了帧
        if ( frame.empty() )
        {
            std::cout << "Frame is empty." << std::endl;
            break;
        }

        // 显示视频帧
        cv::imshow( "Camera Stream", frame );

        // 按 'q' 键退出循环
        if ( cv::waitKey( 1 ) == 'q' )
        {
            break;
        }
    }

    // 释放资源
    cap.release();
    cv::destroyAllWindows();

    return 0;
}

运行结果

输出的是摄像头的实时视频画面

相关推荐
是十一月末3 分钟前
Opencv实现图片的边界填充和阈值处理
人工智能·python·opencv·计算机视觉
Amarantine、沐风倩✨6 分钟前
设计一个监控摄像头物联网IOT(webRTC、音视频、文件存储)
java·物联网·音视频·webrtc·html5·视频编解码·七牛云存储
机智的叉烧36 分钟前
前沿重器[57] | sigir24:大模型推荐系统的文本ID对齐学习
人工智能·学习·机器学习
凳子花❀39 分钟前
强化学习与深度学习以及相关芯片之间的区别
人工智能·深度学习·神经网络·ai·强化学习
量子-Alex2 小时前
【多模态聚类】用于无标记视频自监督学习的多模态聚类网络
学习·音视频·聚类
泰迪智能科技012 小时前
高校深度学习视觉应用平台产品介绍
人工智能·深度学习
盛派网络小助手3 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
Eric.Lee20213 小时前
Paddle OCR 中英文检测识别 - python 实现
人工智能·opencv·计算机视觉·ocr检测
cd_farsight3 小时前
nlp初学者怎么入门?需要学习哪些?
人工智能·自然语言处理
AI明说3 小时前
评估大语言模型在药物基因组学问答任务中的表现:PGxQA
人工智能·语言模型·自然语言处理·数智药师·数智药学