【发布时间】:2017-11-04 23:07:07
【问题描述】:
我有一个单一的暗淡数组,其中存储了图像的像素。我正在尝试将它作为二维数组打印到文件中。
每张图片为28*28像素,数组包含60000个。
我对输出单个图像的数学没有问题:
void makeImage(const std::string& filename,const char * insertion, const unsigned int& width, const unsigned int & height)
{
int i = 0;
FILE *fp = fopen(filename.c_str(), "wb"); /* b - binary mode */
(void)fprintf(fp, "P6\n%d %d\n255\n", width, height);
for (int x = 0; x < width; ++x)
{
for (int y = 0; y < height; ++y)
{
static unsigned char color[3];
color[0] = *(insertion + i); /* red */
color[1] = *(insertion + i); /* green */
color[2] = *(insertion + i); /* blue */
(void)fwrite(color, 1, 3, fp);
i++;
}
}
(void)fclose(fp);
}
所以如果我在哪里做:
makeimage("myfile.ppm",&myarray[0],28,28); //First image.
makeimage("myfile2.ppm",&myarray[785],28,28); //Second image. ext.
但我想获得一张包含所有 60000 个图像的图像。作为 6860x6860 像素的图像。
但要做到这一点的数学让我很头疼。
【问题讨论】:
-
请注意,
6860*6860 = 47,059,600不等于28*28*60,000 = 47,040,000,这基本上意味着您不能完全适合所有图像,因为6,860 / 28 = 245和245*245 = 60,025还有 25 个图像。 -
您想如何将这 60,000 张图像排列成一个大马赛克?由于您正在逐列序列化这些图像,因此您已经将它们作为一张图像,高 28 像素,宽 1,680,000 像素。
-
您需要使用另一个网格,例如 100 x 600 的图像,即:2800 x 16800 像素。
-
顺便说一句,C 代码标记为 C++。为什么会这样?
-
OT:在 C++ 中使用 iostream。