21xrx.com
2024-09-19 09:33:42 Thursday
登录
文章检索 我的文章 写文章
C++ OpenCV 图像采集存储到硬盘
2023-07-05 01:08:12 深夜i     --     --
C++ OpenCV 图像采集 存储 硬盘

C++ OpenCV 是一种广泛使用的计算机视觉库,它能够进行各种图像和视频处理操作。其中,图像采集与存储是 OpenCV 库的重要应用之一,因为它可以为图像处理以及机器学习等领域提供强大的支持。本文将介绍如何使用 C++ OpenCV 实现图像采集并将其存储到硬盘上。

首先,我们需要安装 OpenCV 库并创建一个 C++ 程序。在程序中,我们需要引用“opencv2/core.hpp”和“opencv2/highgui.hpp”两个库。接下来,我们需要创建一个 OpenCV 的 VideoCapture 对象,它可以捕获摄像头的输出。


#include <opencv2/core.hpp>

#include <opencv2/highgui.hpp>

using namespace cv;

int main()

{

  VideoCapture cap(0); // 0 表示默认摄像头

  if (!cap.isOpened())

  {

    printf("无法连接摄像头\n");

    return -1;

  }

  Mat frame;

  while (1)

  {

    cap.read(frame);

    imshow("摄像头", frame);

    int key = waitKey(30);

    if (key == 27) // 按下 ESC 键退出程序

    

      break;

    

  }

  return 0;

}

以上代码将打开默认的摄像头,并将每个获取到的帧存储到名为“frame”的 OpenCV Mat 对象中。随后,我们可以使用“imshow”函数将帧显示在屏幕上,并使用“waitKey”函数等待用户按下按键。当用户按下 ESC 键时,程序将跳出循环,并退出。

如果需要将获取到的帧存储到硬盘上,我们可以在程序中使用 “imwrite” 函数。例如,以下代码将每一帧存储到“output.avi”文件中:


#include <opencv2/core.hpp>

#include <opencv2/highgui.hpp>

using namespace cv;

int main()

{

  VideoCapture cap(0); // 0 表示默认摄像头

  if (!cap.isOpened())

  {

    printf("无法连接摄像头\n");

    return -1;

  }

  VideoWriter outputVideo;

  int width = (int)cap.get(CAP_PROP_FRAME_WIDTH); // 获取帧宽

  int height = (int)cap.get(CAP_PROP_FRAME_HEIGHT); // 获取帧高

  outputVideo.open("output.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), 25, Size(width, height), true);

  if (!outputVideo.isOpened())

  {

    printf("无法打开输出文件\n");

    return -1;

  }

  Mat frame;

  while (1)

  {

    cap.read(frame);

    if (frame.empty())

    {

      printf("帧为空\n");

      break;

    }

    imshow("摄像头", frame);

    outputVideo.write(frame); // 将帧写入输出文件

    int key = waitKey(30);

    if (key == 27) // 按下 ESC 键退出程序

    

      break;

    

  }

  return 0;

}

以上代码首先使用 “VideoWriter” 对象打开一个名为“output.avi”的文件。然后,我们根据摄像头输出的帧尺寸设置输出文件的帧大小。每个采集到的帧都被写入该输出文件中。

需要注意的是,我们需要检查是否成功打开了输出文件,以及每个读取到的帧是否为空。在实际应用中,我们可以根据具体需要对程序进行调整,并添加例如对比度调整、图像滤波、视频压缩等功能。

在本文中,我们介绍了如何使用 C++ OpenCV 库实现图像采集并将其存储到硬盘上。通过本文的介绍,我们可以了解如何使用 OpenCV 库实现对摄像头的控制,并将图像数据保存到本地文件中。这种技术应用广泛,例如监控系统、机器人视觉、视频处理等领域均有涉及。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复