gpt4 book ai didi

c++ - 十六进制数据 (RGB888) 中的图像文件到 BMP、JPG、PNG 或其他格式

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

我遇到了以下问题,我得到了图像文件(应该是 RGB888),但我不确定它是否真的是这种数据。 (我只知道数据的假定格式(例如 400 * 600),这就是为什么我制作了一张图片的样本数据,我确切地知道十六进制数据的格式。)

我创建的数据看起来像这样:

0xf3, 0x8d, 0x4c, 0xff, 0xf2, 0x8f, 0x4b, 0xff, 0xef, ...

在这种情况下,我确定这是 RGB888,因为我转换了它。所以我做的第一步是加载文件并将数据流式传输到 char 数组。

std::ifstream infile;
char *array;
uint8_t *pixelValues;

infile.exceptions ( std::ifstream::failbit );
try {
infile.open(filename, std::ios_base::binary);
infile >> std::hex >> std::setw(2) >> std::setfill('0');
int length;

if (!infile.bad()) {
length = infile.rdbuf()->pubseekoff(0, std::ios_base::end);
array = new char[length];
infile.rdbuf()->pubseekoff(0, std::ios_base::beg);
infile.read(array, length);
infile.close();
}

uint8_t value;
pixelValues = new uint8_t[length/5];

std::size_t counter = 0;
std::size_t valueCounter = 0;

while (true) {
value = strtol(&array[counter], NULL, 0);
pixelValues[valueCounter++] = value;

while ((array[counter] != ',')) counter++;
counter++;
if (counter >= length) break;
}
}

在这一步之后,uint8_t pixelValues 中的数据应该是文件中数据的位数组。

我现在的问题是,如何继续......我做的事情是正确的还是有“更聪明”的方法从这个十六进制数据中获取图像?

我的同事告诉我,我应该使用 openCV 继续下一步,但我根本无法运行它。

如果你们中有人有好的想法,请告诉我;-)

最佳答案

当有人给你一张原始图像并说它是 400x600 像素的 RGB888 时,首先要检查的是查看文件大小,看看它是否:

400 * 600 * 3

字节,您可以在它们离开之前很容易地检查这些字节,让您对格式和内容产生一些错误的印象。那么,您的文件正好是 720,000 字节吗?


如果您想要以最简单的方式获取 PNG 或 JPEG,您只需在终端/命令提示符的命令行中使用 ImageMagick。所以,如果它是 400 像素宽和 600 像素高和 RGB888,您将执行以下操作以获得 PNG 文件:

magick -depth 8 -size 400x600 RGB:YourFile.dat result.png

如果您想要 JPEG,请使用:

magick -depth 8 -size 400x600 RGB:YourFile.dat result.jpg

如果您不想安装 ImageMagick,您可以输入 NetPBM PPM终端文件前面的 header ,如下所示:

printf "P6\n400 600\n255\n"  >  result.ppm
cat YourImage.dat >> result.ppm

然后您将拥有一个 PhotoshopGIMPfeh 和许多其他程序可以读取并另存为 PNG 或 JPG 的文件。当然,您可以用 3 行 C++ 完成完全相同的事情。


如果没有吸引您的,您可以使用CImg - 一个出色、小巧、易于使用的 C++ 图像处理库。参见 here举个例子。

关于c++ - 十六进制数据 (RGB888) 中的图像文件到 BMP、JPG、PNG 或其他格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53724976/

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