C中的.bmp处理

时间:2017-03-06 05:23:25

标签: c image-processing

我需要用C或C ++编写程序(C中的首选项),它读取黑白.bmp并在每个像素中生成一个灰度级(0到255)的直方图。 我试图寻找可能对我有帮助的库,但到目前为止我还没有找到任何东西,甚至没有开始。 谁能引导我通过这个?我几乎没有C知识,这必须用这种语言来完成。 我见过OpenCV和这个ImageClass.h库,但没有任何帮助。 我应该如何开始,是否有人有任何实际上可以帮助我学习的材料?

1 个答案:

答案 0 :(得分:2)

要从C ++中获取bmp文件中的单个像素数据,使用库会更容易 - 即stb_image是一个非常简单的使用仅限标题库来加载各种图像文件。但是还有很多其他的库,它们可以做同样的事情(例如CImgCBitmap,如果你在Windows上,FreeImage,...)。 OpenCV可以加载图像,但它也可以执行更复杂的任务 - 即将各种常用算法应用于图像数据。仅仅计算一个简单的直方图OpenCV可能有点过分。

一旦你可以以类似数组的结构访问bmp文件中的原始像素数据,直接计算直方图:只需遍历每个像素并根据颜色值增加计数器。在灰度图像的情况下,这可以是0(对于黑色),255(对于白色)或其间的任何值。直方图只是所有可能颜色的像素频率。

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

int main(int argc, char* argv[]) {
  int width, height, bpp;
  unsigned char* pixels = stbi_load("grayscale.bmp", &width, &height, &bpp, 1);
  int histogram[256] = { 0 };
  for (int y = 0; y < height; y++) {
    for (int x = 0; x < width; x++) {
      histogram[pixels[x + y * height]]++;
    }
  }
  stbi_image_free(pixels);
  return 0;
}