代码实现:

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

using namespace std;
using namespace cv;

int main()
{
    string folder_path = "path/to/folder"; // 文件夹路径
    vector<string> file_names; // 存储文件名的容器
    glob(folder_path, file_names); // 获取文件夹内所有文件名

    for (auto file_name : file_names) // 遍历每个文件
    {
        Mat img = imread(file_name); // 读取图片
        cvtColor(img, img, COLOR_BGR2GRAY); // 灰度化
        imwrite(file_name, img); // 保存图片
    }

    return 0;
}

原理讲解:

  1. 头文件:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>

opencv2/opencv.hpp 头文件包含了 OpenCV 的所有功能。iostreamstring 是 C++ 标准库中的头文件,用于输入输出和字符串操作。

  1. 变量定义:
string folder_path = "path/to/folder"; // 文件夹路径
vector<string> file_names; // 存储文件名的容器

folder_path 存储了要处理的文件夹路径。file_names 是一个字符串容器,用于存储文件夹内的所有文件名。

  1. 获取文件名:
glob(folder_path, file_names); // 获取文件夹内所有文件名

glob 函数可以获取指定路径下的所有文件名,并将它们存储在一个容器中。

  1. 图片处理:
for (auto file_name : file_names) // 遍历每个文件
{
    Mat img = imread(file_name); // 读取图片
    cvtColor(img, img, COLOR_BGR2GRAY); // 灰度化
    imwrite(file_name, img); // 保存图片
}

for 循环遍历了 file_names 容器中的每个文件名。imread 函数用于读取图片,cvtColor 函数将图片灰度化,imwrite 函数将处理后的图片保存。

  1. 完整代码:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>

using namespace std;
using namespace cv;

int main()
{
    string folder_path = "path/to/folder"; // 文件夹路径
    vector<string> file_names; // 存储文件名的容器
    glob(folder_path, file_names); // 获取文件夹内所有文件名

    for (auto file_name : file_names) // 遍历每个文件
    {
        Mat img = imread(file_name); // 读取图片
        cvtColor(img, img, COLOR_BGR2GRAY); // 灰度化
        imwrite(file_name, img); // 保存图片
    }

    return 0;
}

以上就是使用 C++ 和 OpenCV 实现对一个文件夹内多个图片进行读取之后灰度化,然后再保存的代码以及原理详细讲解

C++和Opencv实现对一个文件夹内多个图片进行读取之后灰度化然后再保存代码以及对应的原理详细讲解

原文地址: https://www.cveoy.top/t/topic/cHVc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录