21xrx.com
2025-03-27 00:21:25 Thursday
文章检索 我的文章 写文章
C++和OpenCV的交互式文件选择功能
2023-07-04 19:13:23 深夜i     16     0
C++ OpenCV 交互式 文件选择功能 编程

C++和OpenCV是当下非常流行的编程语言和图像处理库,它们可以让我们实现许多令人惊叹的旋转、裁剪、过滤和其他操作。这些工具为我们处理图像和视频提供了巨大的帮助,但是在使用它们时可能会遭遇一个棘手的问题:如何导入和导出文件?

在许多项目中,我们需要让用户选择一个文件,然后将其加载到我们的程序中。这是C++和OpenCV中非常基本的操作,但并不总是那么简单。在本文中,我们将介绍如何创建一个交互式文件选择器,以在C++和OpenCV中简单地加载和导出图像文件。

首先,我们需要包含C++和OpenCV的文件头并创建一个显示图像的窗口。这很容易:

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
int main()
{
  Mat img = imread("example.jpg");
  namedWindow("OpenCV Window", WINDOW_NORMAL);
  imshow("OpenCV Window", img);
  waitKey(0);
  return 0;
}

现在,当我们编译和运行这个程序时,它会加载一个名为“example.jpg”的图片文件并在窗口中显示。

现在,让我们添加一个交互式文件选择器来让用户选择他们自己的图像文件。 为此,我们将使用C++中的标准I / O库并调用OpenCV的图像处理函数。 下面是这个过程的代码:

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
int main()
{
  Mat img;
  string filename;
  cout << "Please enter the name of the image file: ";
  cin >> filename;
  img = imread(filename);
  if(img.empty())
  {
    cout << "Could not open or find the image '" << filename << "'\n";
    return -1;
  }
  namedWindow("OpenCV Window", WINDOW_NORMAL);
  imshow("OpenCV Window", img);
  waitKey(0);
  return 0;
}

该程序将提示用户输入他们所选择的图像文件的名称,并使用OpenCV的imread函数加载该文件。 如果该文件不存在或无法打开,则程序将弹出一条错误消息。

现在,让我们添加一些代码来允许用户将处理后的图像保存到他们所选的文件中。为此,我们将利用C ++中的std :: fstream库和OpenCV中的imwrite函数。

#include <iostream>
#include <fstream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
using namespace cv;
using namespace std;
int main()
{
  Mat img;
  string filename_in, filename_out;
  cout << "Please enter the name of the image file to open: ";
  cin >> filename_in;
  img = imread(filename_in);
  if(img.empty())
  {
    cout << "Could not open or find the image '" << filename_in << "'\n";
    return -1;
  }
  namedWindow("OpenCV Window", WINDOW_NORMAL);
  imshow("OpenCV Window", img);
  cout << "Please enter the name of the output image file: ";
  cin >> filename_out;
  bool success = imwrite(filename_out, img);
  if(success)
  {
    cout << "Image saved successfully to '" << filename_out << "'\n";
  }
  else
  {
    cout << "Could not write the image to '" << filename_out << "'\n";
  }
  waitKey(0);
  return 0;
}

现在,我们拥有一个完整的C++和OpenCV程序,可以交换图像文件并在交互式图形用户界面中显示图像。 无论您需要处理任何类型的图像或视觉媒体,此代码都是一种强大而有效的方法,可以为您提供您所需的全部工具。

  
  

评论区