C++ 同时读取和写入文件
c++ read and write files simultaneously
我正在尝试读取文件夹中的所有.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_in
和path_out
是std::string
或cv::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;
}
相关文章:
- 正在将csv文件读取为双精度矢量
- 将从格式化文本文件读取的文本数据存储到链表
- C++ 读取文件读取文件不正确
- 使用对象文件读取三角形数据网格
- 如何减慢从 BVH 文件读取的 opengl 动画?
- 从文件读取,并写入函数C++中的数组
- 从对象C++中的文件读取内容时出现分段错误
- 从文件读取并通过矢量输出到控制台
- 尝试将字符串从文件读取到无符号字符向量中
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 简化文件读取的函数
- 如何将逗号分隔的文件读取为 2D int 数组?
- 在 c++ 中将数据从文件读取到队列中
- 'std::wstring_convert'尽可能多地转换(从 UTF8 文件读取块)
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 文件读取C++包括空格键
- 从文件读取时未将值推回矢量
- 从文件 C++ 读取时的无限循环
- 从同一文件读取和写入?
- 从.txt文件读取到C++中的双精度向量