gpt4 book ai didi

c++ - 在 MVC C++ 中从 1 字节控制台输出图像创建 PNG 文件

转载 作者:行者123 更新时间:2023-11-28 04:49:11 26 4
gpt4 key购买 nike

我正在使用 C++ 提取 MNIST 数据集并使用它输出到控制台。

// show a random character
int ind;
/* initialize random seed: */
srand(time(NULL));

/* generate secret number: */
ind = rand() % number_of_images;

cout << "" << endl;
cout << "Opening a example: " << endl;
cout << +labels[ind] << endl;
cout << "" << endl;


// 28 rows
for (int i = 0; i < 28; i++)
{
// 28 cols
for (int j = 0; j < 28; j++)
{
if (dataset[ind][i * 28 + j] > 80)
{
cout << 1;
SetPixel();
}
else
{
cout << 0;
}
}
cout << "" << endl;
}
system("pause");

我尝试使用各种方法来创建它,但是所有方法都太复杂了。我只需要包含一个函数或方法,它将一个像素写入文件,其中 I 和 J 是坐标,并且(如果是数据集)是白色像素或黑色像素。谁能帮帮我?

最佳答案

train-images.idx3-ubyte 文件开头似乎有 16 个字节的 header 数据,然后每个 28x28 像素的图像有 784 个字节。

如果你想制作 PNG 文件,最简单的方法是按照描述编写一个 NetPBM 可移植灰度图 (PGM) 文件here并让 ImageMagickIrfanviewPhotoshop 将生成的 PGM 文件转换为 PNG。

因此,您的程序只需要在开始时输出一个 PGM header ,如下所示:

P5
28 28
255

后面是您当前正在写入控制台的 768 字节图像,然后将其保存为 SomeFile.pgm。然后,您可以使用 ImageMagick 将其中一个转换为 PNG:

magick SomeFile.pgm -negate SomeFile.png

或者您可以将整个目录的 PGM 文件转换为相应的 PNG 文件,仍然使用 ImageMagick 但它的 mogrify 这次的工具:

magick mogrify -format PNG -negate *.pgm

如果你可以在 Linux 或其他体面的(非 Windows)系统上使用,你可以像这样提取它们,而无需编写任何 C:

#!/bin/bash

# Remove the 16 byte header
dd if=train-images.idx3-ubyte bs=16 iseek=1 > nohead

# Extract all 10,000 images to PNG
for ((i=0;i<10000;i++)) ; do
echo $i
{ printf "P5\n28 28\n255\n"; dd if=nohead bs=784 iseek=$i count=1 2>/dev/null ; } | magick pgm:- -negate $i.png
done

关于c++ - 在 MVC C++ 中从 1 字节控制台输出图像创建 PNG 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48566913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com