0

我正在尝试将不同文件夹中不同尺寸的图像转换为宽度和高度中定义的相同尺寸,并将它们保存在不同的文件夹中或替换它们,我使用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 );

只将一张图片保存到我的文件夹 test 中,我希望它们都在我的文件夹中

4

3 回答 3

1

以下是如何调整图像大小的示例:

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;
}
于 2013-09-08T13:30:39.680 回答
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 以保存在那里

于 2013-09-08T18:25:48.253 回答
0

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

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

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

于 2013-09-09T08:56:27.437 回答