【发布时间】:2016-09-07 06:31:38
【问题描述】:
我正在改写它,因为有人认为它是“离题”和其他一些粗鲁的回应,而没有考虑我的努力和所有搜索,非常感谢锁定我 4 天,因为你们中的两个人认为我没有写一行代码
我会写下我的微不足道的失败并放心,我使用了搜索按钮
我正在使用 C 和 CUDA 进行图像处理项目。我知道问题的核心,但我遇到了一个小问题
读取和写入灰度图像(PNG 或 BMP)作为输入和输出
我的“稍后再考虑”策略与我的同事相同:
1) 使用 Matlab 脚本:[X,map] = imread('xray.png');
地图对于灰度非常无用(对 RGB 文件很有用),但 X 向我返回了一个宽度 x 高度矩阵,其中包含作为各种“亮度”比例的整数
2)使用Matlab中的fprintf函数编写一个3行的xray.txt:
- 宽度
- 身高
- Width*Heigth 行整数,以空格分隔
3) 像这样在 C 中导入数据:
FILE *image;
image = fopen("xray.txt","r");
width=fscanf(image,"%f\n",&width);
heigth=fscanf(image,"%f\n",&heigth);
pixels=(float *) calloc(width*heigth, sizeof(float));
for (int i = 0; i < width*heigth; i++) {
fscanf(image,"%f ",&pixels[i]);
}
fclose(image);
4) OFFTOPIC 图像处理算法的核心,我需要 一个 1D 浮点数组(代码的第二个版本在 CUDA 中)。在处理对抗时,我需要代码相同
5)逆过程:从宽、高、像素,我写了一个xrayout.txt,xrayedges.txt
6) 第二个 MatLab 脚本,从 xrayout.txt & xrayedges.txt 生成 xrayout.bmp & xrayedges.bmp.. 不值得发,是imRead的逆过程
项目本身已经完成,一切都很好,但我真的很烦我找不到“只有 C”的解决方案
是否有人知道一些简单的方法来读取和写入灰度 PNG,知道:宽度、高度、像素值? 有可以导入 BMP 或 PNG 图像的功能吗? 是否需要二维数组没关系,我可以自己解决
注意 1:简单来说,我的意思是“vanilla C”,不使用一些外来库或其他语言(如果是这样,我会坚持使用 MatLab 脚本)
注意 2:我尝试过(多次失败)并在 stackoverflow 和 google 中搜索,发布此帖子是我最后的可能性,所以请温柔
【问题讨论】:
-
当然,标准 C 中的每个任务都有一个函数来处理人们能想到的每一个任务。只需使用
do_what_i_want-函数。说真的:你的问题离题太远了。可以通过简单的搜索来回答。 -
嗯,转念一想,C/C++ 语言实际上可能有这样的功能。但是两种不同的语言 C 和 C++ 没有。
-
您可以使用 PGM 格式 (en.wikipedia.org/wiki/Netpbm_format) 这正是您所描述的。我也怀疑 C 中有一个关于加载特定图像格式的内置函数 :) 但你可以自己编写一个加载程序,这将是几个 fscanf() 调用(或 C++ 的文件流读取)。
-
你应该表现出自己的努力来解决你的问题。这可以在没有任何 C 和 C++ 中的非标准库的情况下完成。您唯一需要做的就是使用 google 或阅读位图文件规范并相应地实现您的东西。为什么要将 0 到 255 之间的整数值放入浮点数组中? (提示0-255可以用1个字节覆盖)
-
@Olaf 我在阅读了所有搜索后发布了它。我付出了一些努力,但发布失败似乎毫无用处。谢谢你看不起我。
标签: c++ c image-processing