c++结合opencv如何实现读取多张图片并显示

为了做到 "c++结合opencv如何实现读取多张图片并显示",我们可以按照以下步骤:

  1. C++中读取多个图像,并将它们存储到一个vector容器中;
  2. 对图像进行处理,例如调整大小、灰度化等;
  3. 用OpenCV中的imshow函数将图像显示出来。

现在我们来一步步实现。

读取多个图像

首先,我们需要找到要读取的图像的路径并将它们存储到一个vector容器中。下面的示例代码展示了如何将多个图像读取并存储到一个vector容器中。

#include <opencv2/opencv.hpp>
#include <vector>
#include <string>

int main()
{
    std::string path = "path_to_images_folder";
    std::vector<cv::Mat> images;

    std::vector<std::string> filenames = { "image1.jpg", "image2.jpg", "image3.jpg" };

    for (auto filename : filenames)
    {
        cv::Mat image = cv::imread(path + "/" + filename);

        if (image.empty())
        {
            std::cerr << "Could not read image: " << filename << std::endl;
            return 1;
        }

        images.push_back(image);
    }

    return 0;
}

代码中,
- 首先我们定义一个路径变量“path”以及一个空的vector容器“images”。
- 然后,我们定义一个包含文件名的vector容器来读取图像,这里仅作示范。
- 每张图像都通过cv::imread函数读取并存储到images容器中。在读取图像后,我们需要检查图像是否为空,如果为空,则说明读取失败,应该打印一个错误消息并退出程序。

图像处理

我们可以在显示之前编辑图像。例如,可以调整大小,并将图像转换为灰度图像。下面的示例代码展示了如何将读取的图像调整大小并转换为灰度图像。

int main()
{
    // ...

    for (auto& image : images)
    {
        // resize image
        cv::resize(image, image, cv::Size(), 0.5, 0.5);

        // convert to grayscale
        cv::cvtColor(image, image, cv::COLOR_BGR2GRAY);
    }

    // ...
}

代码中,
- 我们使用cv::resize函数调整图像大小,该函数需要一个缩放比例以及一个期望大小。这里我们将图像大小缩小一半。
- 然后,我们使用cv::cvtColor函数将图像转换为灰度图像。在这里我们将BGR彩色图像转换为灰度图像,可以根据需要进行更改。

显示图像

最后一步是将预处理的图像通过imshow函数显示出来。下面是完整代码:

int main()
{
    std::string path = "path_to_images_folder";
    std::vector<cv::Mat> images;

    std::vector<std::string> filenames = { "image1.jpg", "image2.jpg", "image3.jpg" };

    for (auto filename : filenames)
    {
        cv::Mat image = cv::imread(path + "/" + filename);

        if (image.empty())
        {
            std::cerr << "Could not read image: " << filename << std::endl;
            return 1;
        }

        images.push_back(image);
    }

    for (auto& image : images)
    {
        // resize image
        cv::resize(image, image, cv::Size(), 0.5, 0.5);

        // convert to grayscale
        cv::cvtColor(image, image, cv::COLOR_BGR2GRAY);

        // display image
        cv::imshow("Image", image);
        cv::waitKey(0);
    }

    return 0;
}

代码中,
- 在完成读取和预处理后,我们循环遍历每个图像,并使用cv::imshow函数将图像显示出来。
- 当cv::waitKey函数不在循环中使用时,按下任意键后将关闭窗口。若在循环中使用,则在显示下一张图像前会等待用户按下一个键。

可以看到,在上面的代码中通过cv::imshow函数已经完成了最后的显示。其中,第一个参数是显示图像时的窗口的名称,第二个参数是要显示的图像。

另一个例子是,通过使用OpenCV的文件读取器函数glob。glob函数用于从文件夹中一次读取多个文件。这里有一个例子:

int main()
{
    std::string path = "path_to_images_folder";

    std::vector<cv::Mat> images;
    std::vector<cv::String> filenames;

    cv::glob(path, filenames);

    for (auto& filename : filenames)
    {
        cv::Mat image = cv::imread(filename);

        if (image.empty())
        {
            std::cerr << "Could not read image: " << filename << std::endl;
            return 1;
        }

        images.push_back(image);
    }

    for (auto& image : images)
    {
        // resize image
        cv::resize(image, image, cv::Size(), 0.5, 0.5);

        // convert to grayscale
        cv::cvtColor(image, image, cv::COLOR_BGR2GRAY);

        // display image
        cv::imshow("Image", image);
        cv::waitKey(0);
    }

    return 0;
}

在这个例子中,我们使用cv::glob函数从文件夹中读取图像,并将它们存储在一个vector容器中。然后,我们按照之前的方式预处理图像并显示它们。

在上面的所有例子中,我们都可以根据需要更改读取的图像路径和图像名称。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++结合opencv如何实现读取多张图片并显示 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++ Boost Algorithm算法超详细精讲

    C++ Boost Algorithm算法超详细精讲 Boost是一套C++的开源库,其中包含了许多优秀的算法。本文通过一些常用算法的具体讲解,帮助读者熟练掌握Boost库的使用。 安装Boost库 在使用Boost之前,我们需要先安装Boost库。Boost库可以通过官方网站下载,下载完毕后通过以下步骤进行安装: 解压下载的Boost库文件 打开终端,进入…

    C 2023年5月23日
    00
  • 使用typescript+webpack构建一个js库的示例详解

    让我们来讲解一下“使用TypeScript+Webpack构建一个JS库的示例详解”。 环境准备 首先,我们需要准备好环境。具体来说,需要安装以下软件:- Node.js- TypeScript- Visual Studio Code 或者其他编辑器 创建项目 首先,我们需要创建一个新的项目。在终端中执行以下命令,创建一个新的目录并进入该目录: mkdir …

    C 2023年5月23日
    00
  • Visual Studio Code 2020安装教程及CPP环境配置(教程图解)

    Visual Studio Code(简称VS Code)是一款由微软推出的免费、开源的代码编辑器。VS Code支持多种编程语言,如C/C++、Python、Java、JavaScript等等,并且拓展插件丰富,使得开发者可以高效地完成开发任务。以下是Visual Studio Code 2020安装教程及CPP环境配置的完整攻略。 步骤1:下载安装Vis…

    C 2023年5月24日
    00
  • java 实现黄金分割数的示例详解

    Java 实现黄金分割数的示例详解 什么是黄金分割数 黄金分割数又称黄金比例,是一种在数学、美术及建筑等领域中广泛存在的比例关系。黄金分割比例是指将一条线段分成两条部分,使其中一条部分与全长之比等于另一条部分与这条部分之比。 数学上,黄金分割比例为 (根号5-1)/2,约等于 0.6180339887。 如何实现黄金分割数 在 Java 中,可以使用以下代码…

    C 2023年5月22日
    00
  • JDK 7 新特性小结实例代码解析

    JDK 7 新特性小结实例代码解析 简介 JDK 7 是 Java Development Kit 的版本号,是 Java 的一个版本。JDK 7 主要添加了许多新特性,包括小型语言改进、文件访问/输入和输出的 I/O 改进、内部脚本引擎、实例创建类型推断、字符串开头的结尾和 switch 语句中的字符串变量、数字下划线等。本文将从例子出发,详细地介绍 JD…

    C 2023年5月23日
    00
  • C语言字符串快速压缩算法代码

    C语言字符串快速压缩算法代码 什么是字符串快速压缩算法 字符串压缩是一种将文本数据编码为较短二进制串的技术,其可以对一定范围内的部分文本数据进行无损压缩,使得压缩后的数据占用更小的存储空间,也方便网络传输和存储。 字符串快速压缩算法是一种快速编码和高效解码的无损算法。该算法的主要思想是通过统计原始数据中出现的字符及其出现的频率,选用最出现频率的字符在新的编码…

    C 2023年5月22日
    00
  • C++生成dll和调用dll的方法实例

    生成DLL和调用DLL是C++编程中非常常见的操作,下面是详细的步骤和示例说明: 生成DLL 写好需要导出的函数。在其定义前加上 __declspec(dllexport),用于导出函数。 cpp __declspec(dllexport) int Add(int a, int b) { return a + b; } 设置项目属性。 配置属性 -> …

    C 2023年5月23日
    00
  • CCleaner如何查看版本号?CCleaner查看版本号方法

    CCleaner是一款非常流行的系统清理工具,使用最多的用户估计都想知道如何查看它的版本号。下面是完整的攻略,包含了CCleaner的版本号查看方法和两条示例说明。 CCleaner如何查看版本号? 要查看CCleaner的版本号,可以按照以下步骤操作: 打开CCleaner应用程序。 在第一次启动应用程序的界面,在欢迎界面的左上角可以看到版本号,如“CCl…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部