c++同时读写文件

圣诞老人

我正在尝试读取文件夹中的所有 .png 文件,然后获取它们的灰度并将它们重写到一个新文件夹中(具有相同的名称)。

我的 path_in 文件:1.png, 2.png, ...(每次总文件数不同)

所以最后,path_out 应该包含相同数量的 png 文件,所有文件都与 path_in 中的名称相同。

但我现在卡住了。由于我是 C++ 的新手,我无法让自己做到这一点。
错误在于重载“+”运算符。

int main()
{
Mat pic,gray;
vector<cv::String> fn;
glob(path_in + "*.png", fn, false);

vector<Mat> images;
size_t count = fn.size(); 
for (size_t i = 1; i < count + 1; i++)
{
    pic = imread(path_in + i, CV_LOAD_IMAGE_COLOR);
    cvtColor(pic, gray, CV_BGR2GRAY);

    imwrite(path_out + i + ".png", gray); 

}
}

编辑的代码:

#include "stdafx.h"
#include "iostream"
#include <direct.h>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;
using namespace std;

std::string path_in("C:/Users/t/");
std::string path_out("C:/Users/New folder/");

int main()
{
    _mkdir(path_out.c_str()); //create folder if does not exist

    Mat pic, gray;

    vector<cv::String> fn;
    glob(path_in + "*.png", fn, false);

    //vector<Mat> images;
    size_t count = fn.size();
    for (size_t i = 1; i < count; ++i)
    {
        pic = imread(path_in + fn[i], CV_LOAD_IMAGE_COLOR);
        cvtColor(pic, gray, CV_BGR2GRAY); //error : Unhandled exception

        imwrite(path_out + fn[i] + ".png", gray);
    }

waitKey(0);
return 0;
}  

** 抱歉一开始没有显示完整的代码,这里是我的组合代码和建议的答案。
任何人都可以点亮一些灯吗?

雷米勒博

假设path_inand path_outarestd::stringcv::String变量,您不能使用+运算符按size_t原样附加到它们,您必须先将整数值转换为std::string/cv::String值,例如:

int main()
{
    Mat pic, gray;
    vector<cv::String> fn;
    glob(path_in + "*.png", fn, false);

    size_t count = fn.size();
    for (size_t i = 1; i <= count; ++i)
    {
        pic = imread(path_in + std::to_string(i) + ".png", CV_LOAD_IMAGE_COLOR);
        cvtColor(pic, gray, CV_BGR2GRAY);

        imwrite(path_out + std::to_string(i) + ".png", gray);
    }
    return 0;
}

但是,您不应假设文件名是按顺序编号的。glob()返回一个vector字符串,所以大概它返回实际的文件名,所以按原样使用它们,例如:

int main()
{
    Mat pic, gray;
    vector<cv::String> fn;
    glob(path_in + "*.png", fn, false);

    size_t count = fn.size();
    for (size_t i = 0; i < count; ++i)
    {
        pic = imread(path_in + fn[i], CV_LOAD_IMAGE_COLOR);
        cvtColor(pic, gray, CV_BGR2GRAY);

        imwrite(path_out + fn[i], gray);
    }
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章