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++中对象&类的深入理解

    C++是一种面向对象的编程语言,对象是该语言的核心概念之一。在C++中,类定义了对象的属性和行为,对象则是类的一个实例。在本文中,我们将会深入理解C++中对象和类的相关概念及其使用方法。 对象和类的基本概念 在C++中,一个对象是类的实例。类是定义对象的模板,它描述了对象的属性和操作。类可以看做是一种用户自定义的数据类型,它封装了数据和操作数据的函数。在C+…

    C 2023年5月22日
    00
  • VS2019连接MySQL数据库的过程及常见问题总结

    VS2019连接MySQL数据库的过程及常见问题总结 1. 下载MySQLConnector/C++ 在Visual Studio 2019中使用MySQL数据库,我们需要先安装MySQLConnector/C++库。我们可以在MySQL官网上下载MySQLConnector/C++。下载地址如下:https://dev.mysql.com/download…

    C 2023年5月23日
    00
  • SQL Server 利用触发器对多表视图进行更新的实现方法

    SQL Server 利用触发器对多表视图进行更新的实现方法是一个比较常见的问题,它需要借助于视图、触发器、存储过程等多种技术。下面是一个详细的攻略: 1. 创建多表视图 多表视图是由多个基本表结合而成的虚拟表,可以实现数据的分组、组合、限制等操作。在创建多表视图时,需要使用“CREATE VIEW”语句,并在其中指定所需的基本表和字段。 示例1: CREA…

    C 2023年5月22日
    00
  • C++统计软件使用时间代码示例

    首先,需要明确目标:我们要编写一段C++代码,用于统计软件的使用时间,以便开发者了解用户对软件的使用情况,可以做出相应的优化和改进。 下面是编写该代码的具体攻略: 1. 确定计时方式 在编写统计软件使用时间的代码之前,需要确定计时方式。有三种常见的方式: 使用系统时间:利用系统提供的时间函数,记录软件的启动和关闭时间,用二者之差来计算使用时间。 使用计时器:…

    C 2023年5月23日
    00
  • C语言超详细讲解指针的使用

    C语言超详细讲解指针的使用 什么是指针 指针是C语言中的一种特殊数据类型,它存储了一个变量的地址。通过指针,我们可以访问存储在该地址上的变量。 指针用*标识,在定义一个指针变量时需要指定其指向的数据类型,例如: int *p; // 定义一个指向int类型数据的指针变量p 指针的基本操作 取地址操作 通过在变量名前添加&操作符,我们可以取出该变量的内…

    C 2023年5月24日
    00
  • C++你最好不要做的几点小结

    以下是“C++你最好不要做的几点小结”的完整攻略。 C++你最好不要做的几点小结 1. 不要忘记初始化 C++中未初始化的变量是具有未定义值的,如果试图使用未初始化的变量,将会导致不可预知的结果。因此,在使用变量之前,一定要初始化。对于内建类型,可以使用默认值进行初始化,例如: int a = 0; // 将a初始化为0 bool b = false; //…

    C 2023年5月22日
    00
  • jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)

    下面是关于“jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)”的完整攻略: 1. 前言 首先,这里需要明确一点,这篇攻略介绍的是如何使用jQuery自定义图片缩放拖拽插件imageQ。如果你还不了解什么是jQuery,请先学习一下基础知识。 该插件可用于任何需要在网页中实现图片缩放和拖拽的场景,例如放大镜、海报展示、照片墙等。 2…

    C 2023年5月23日
    00
  • C#正则表达式判断输入日期格式是否正确

    为了使用正则表达式判断输入日期格式是否正确,我们需要编写一个匹配日期格式的正则表达式,然后将要检查的日期与该正则表达式进行匹配。以下是一个完整的攻略: 1. 编写匹配日期格式的正则表达式 正则表达式是一个由一系列字符和操作符组成的模式。它可以用来匹配文本中的特定模式。要编写匹配日期格式的正则表达式,我们可以根据日期格式的规则来构建。以下是一个匹配 “yyyy…

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