C++ 如何使所有图像大小相同并将其写入文件夹
我试图将不同文件夹中不同大小的图像转换为宽度和高度中定义的相同大小,并将它们保存在不同文件夹中或替换它们,我使用功能C++ 如何使所有图像大小相同并将其写入文件夹,c++,image,opencv,image-processing,computer-vision,C++,Image,Opencv,Image Processing,Computer Vision,我试图将不同文件夹中不同大小的图像转换为宽度和高度中定义的相同大小,并将它们保存在不同文件夹中或替换它们,我使用功能cv::resize,当然imwrite可能用于保存它们,但这对我不起作用,因为它显示了resize参数中的错误 int count = 0; int width = 144; int height = 33; vector<string>::const_iterator i; string Dir; for (i = all_names.begin(); i != a
cv::resize
,当然imwrite
可能用于保存它们,但这对我不起作用,因为它显示了resize参数中的错误
int count = 0;
int width = 144;
int height = 33;
vector<string>::const_iterator i;
string Dir;
for (i = all_names.begin(); i != all_names.end(); ++i)
{
Dir=( (count < files.size() ) ? YourImagesDirectory_2 : YourImagesDirectory_3);
Mat row_img = cv::imread( Dir +*i, 0 );
cv::resize(row_img , width , height);
imwrite( "D:\\TestData\\img_resize.jpg", img_resize );
++count;
}
仅将一个图像保存到我的文件夹测试,我希望所有图像都保存在我的文件夹中
Mat img = imread("C:\\foo.bmp");
Mat img_resize;
resize(img, img_resize, Size(144, 33));
编辑:
假设您有几个名为image001.jpg
,image002.jpg
,image003.jpg
,image004.jpg
,image005.jpg
…,并希望在调整大小后保存它们。希望下面的代码能够解决这个问题
#include <cv.h>
#include <highgui.h>
using namespace cv;
char pathLoading[255];
char pathSaving[255];
char num[10];
char jpg[10] = ".jpg";
int counter = 1;
int main(int argc, char** argv) {
while (1) {
if (counter < 6) {
// To load 5 images
strcpy(pathLoading, "c:\\image");
sprintf(num, "%03i", counter);
strcat(pathLoading, num);
strcat(pathLoading, jpg);
Mat image = imread(pathLoading);
Mat image_resize;
resize(image, image_resize, Size(144, 33));
// To save 5 images
strcpy(pathSaving, "c:\\image_resize");
sprintf(num, "%03i", counter);
strcat(pathSaving, num);
strcat(pathSaving, jpg);
imwrite(pathSaving, image_resize);
counter++;
}
}
return 0;
}
#包括
#包括
使用名称空间cv;
字符路径加载[255];
字符路径保存[255];
字符数[10];
char jpg[10]=“.jpg”;
int计数器=1;
int main(int argc,字符**argv){
而(1){
如果(计数器<6){
//加载5个图像
strcpy(路径加载,“c:\\image”);
sprintf(num,“%03i”,计数器);
strcat(路径加载,num);
strcat(路径加载,jpg);
Mat image=imread(路径加载);
Mat图像_调整大小;
调整大小(图像,图像大小,大小(144,33));
//保存5张图片
strcpy(路径保存,“c:\\image\u resize”);
sprintf(num,“%03i”,计数器);
strcat(路径保存,num);
strcat(路径保存,jpg);
imwrite(路径保存、图像大小调整);
计数器++;
}
}
返回0;
}
以下是我在文件夹中保存多个图像的方法:
for (i = all_names.begin() ; i!= all_names.end() ; i++)
{
Dir=( (count < files.size() ) ? YourImagesDirectory : YourImagesDirectory_2);
Mat row_img = cv::imread(Dir+*i );
//imshow ("show",row_img);
Mat img_resize;
resize(row_img, img_resize, Size(144, 33));
Mat img = img_resize;
sprintf(buffer,"D:\\image%u.jpg",count);
imwrite(buffer,img);
//imwrite("D:\\TestData\\*.jpg" , img_resize);
count++;
}
如果唯一的目标是调整图像大小,我想使用具有批处理功能的专用软件(如IrfanView)会更简单 如果这是一个编程练习,请不要问我的答案,也不要看别人的答案
提示:您正在使用单个文件名保存所有图像,从而有效地用新图像重写以前转换的图像。如何将所有图像写入文件夹?@Ahmad您的意思是从一个文件夹加载所有图像吗?文件名是连续的还是完全不同的?不,我想在文件夹名“Test”
或
中保存调整大小后的图像。图像可以保存到同一文件夹中,从那里读取或重写图像,无论如何,我关心的只是将它们保存在我的系统中此功能对我有效,但是它重写了图像:imwrite(“D:\\TestData\\img\u resize.jpg”,img\u resize)
@Ahmad当然,imwrite()
中的文件名每次保存时都应该不同。可以将它们命名为image001.jpg
,image002.jpg
,image003.jpg
等吗?如果是,请阅读以供参考。(代码< iMy> < /C> >与代码< CVSAVIEMIGE/COD>相同,前者为C++ API
for (i = all_names.begin() ; i!= all_names.end() ; i++)
{
Dir=( (count < files.size() ) ? YourImagesDirectory : YourImagesDirectory_2);
Mat row_img = cv::imread(Dir+*i );
//imshow ("show",row_img);
Mat img_resize;
resize(row_img, img_resize, Size(144, 33));
Mat img = img_resize;
sprintf(buffer,"D:\\image%u.jpg",count);
imwrite(buffer,img);
//imwrite("D:\\TestData\\*.jpg" , img_resize);
count++;
}
sprintf(buffer,"D:\\image%u.jpg",count);
imwrite(buffer,img);