使用C或C ++读取/写入BMP / PNG灰度图像

时间:2016-05-11 17:36:41

标签: c++ c image-processing

我正在重写它,因为有人认为这是“偏离主题”和其他一些粗鲁的回应,而没有考虑我的努力和所有的搜索,很多感谢锁定我4天只是因为你们两个认为我没有写一行代码

我会写下我的微不足道的失败并放心,我使用了搜索按钮

我正在用C和CUDA做一个图像处理项目。我知道问题的核心,但我遇到了一个小问题

读取和写入灰度图像(PNG或BMP)作为输入和输出

我的“后来考虑”策略与我的同事一样:

1)使用:[X,map] = imread('xray.png');

使用Matlab脚本

地图对于灰度(对于RGB文件很有用)是没用的,但是X给了我一个Width x Height矩阵,其中intergers作为各种“亮度”比例

2)使用Matlab中的fprintf函数编写一个包含3行的xray.txt:

  1. 宽度
  2. Heigth
  3. 宽度*用空格分隔的整数高度行
  4. 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 图像处理算法的核心,其中我 NEED 一维浮点数组(代码的第二个版本在CUDA中)。在处理对抗时我需要代码相同

    5)反向过程:从宽度,高度,像素,我写一个xrayout.txt,xrayedges.txt

    6)来自xrayout.txt&amp;的第二个MatLab脚本xrayedges.txt生成xrayout.bmp&amp; xrayedges.bmp ..不值得发布,这是imRead的反向过程

    该项目已经完成,一切运作良好,但我真的很尴尬,我找不到“只有C”的解决方案

    有人知道一些简单的方法来读取和写入灰度PNG知道:宽度,高度,像素值? 是否有可以导入BMP o PNG图像的功能? 它是否需要2D阵列并不重要,我可以解决这个问题

    注1:通过简单的方式,我的意思是“香草C”,不使用其他语言的一些异国情调的图书馆(如果是这样,我将坚持使用MatLab脚本)

    注意2:我已尝试(有多次失败)并在stackoverflow和google中搜索,发布此帖子是我的最后一种可能性,所以请保持温和

1 个答案:

答案 0 :(得分:-1)

我小时候也记得C ++的一些规则。可悲的是,如果我要使用它们,我需要再次记住它们。要回答你的问题(我试图这样做),

1。)我认为你对将图像读入C ++感到困惑。 Vanilla C ++本身没有标准库来读取图像,使用openCV或ITK工具箱来获取相关功能。

2。)是的,您可以将读取的图像转换为1D浮点数组,但是没有内置的方法可以自动将1D浮点数组视为图像,即使存在外部工具箱也是如此。例如。你在OpenCV中将图像读入Mat对象:从那里开始,你可以随心所欲地做任何事情,甚至将它转换成一个非常长的一维数组。但它不符合你的目的。

3。)我的意思是我仍然无法理解一维部分,我也喜欢旧的学校代码,但那只是推动它,伙计。事实上,我会说,安装OpenCV并记住它的文档,你将能够完成你提到的所有内容甚至更多。