如何制作相同尺寸的所有图像并将其写入文件夹

时间:2013-09-08 12:56:06

标签: c++ image opencv image-processing computer-vision

我正在尝试将不同大小的图像从我的不同文件夹转换为宽度和高度中定义的相同大小,并将它们保存在不同的文件夹中或替换它们,我使用函数cv::resize,肯定imwrite可能用于保存它们,但它不适用于我,因为它显示调整大小参数的错误。

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;
}

调整此功能后:

imwrite( "D:\\TestData\\img_resize.jpg", img_resize );

只保存一个图像到我的文件夹测试,我希望所有这些图像都在我的文件夹中

3 个答案:

答案 0 :(得分:0)

以下是resize图片的示例:

Mat img = imread("C:\\foo.bmp");
Mat img_resize;
resize(img, img_resize, Size(144, 33));

修改

假设您有多个名为image001.jpgimage002.jpgimage003.jpgimage004.jpgimage005.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;
}

答案 1 :(得分: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++;
    }

使用功能:

sprintf(buffer,"D:\\image%u.jpg",count);
imwrite(buffer,img);

为了保存目录,名称和imwrite

答案 2 :(得分:0)

如果唯一的目标是调整图像大小,我猜想使用具有批处理功能的专用软件会更简单,例如:的IrfanView。

如果这是编程练习,请不要回答我的答案并查看其他人的答案。

提示:您使用单个文件名保存所有图像,从而有效地使用新文件重写以前转换的图像。