【问题标题】:pixel conversion to raw bits (bit-stream)像素转换为原始比特(比特流)
【发布时间】:2012-06-06 20:35:06
【问题描述】:

我想读取图像中每个像素的内容并将其转换为比特流(原始比特)或将其包含在二维数组中。哪个是开始寻找这种转换的最佳地点?

图像细节:标准测试图像,称为 lena.bmp 尺寸:256 x 256 像素位深:8

另外我想知道每个像素的位数对于这个问题的重要性,因为打包和解包也将被合并。

【问题讨论】:

  • 没有太多要转换的,BMP (DIB) 格式或多或少是像素数组的原始转储,前缀为几个标题,您可以通过 Google 搜索快速找到。
  • 我希望能够编写一个程序,将像素值转换为十六进制,然后转换为相应的二进制值,然后将其存储在一个数组中。 OpenCV 会是一个不错的选择还是推荐更简单的方法?

标签: c++ image-processing


【解决方案1】:

CImg 是一个非常简单、轻量级的 C++ 库,可以加载和保存多种图像格式(包括 BMP)。

这是一个单独的头文件,所以不需要编译或链接库。只需包含标题,就可以开始了。

【讨论】:

  • +1 我完全忘记了CImg,好久没用了。
  • 希望这会有所帮助。我真诚地感谢你们的帮助。
  • CImg 非常有效,但我最终使用结构来定义 bmp 结构并使用了相对较长的方法将像素值存储到 3d 数组中,但我选择了 24 位 512x512,这也适用于我的项目。非常感谢您的建议。
【解决方案2】:

你应该研究OpenCV:一个跨平台的计算机视觉库。它提供C++ APIC API,并且支持包括bmp在内的多种图像格式。

在 C++ 接口中,cv::Mat 是表示 2D 图像的类型。一个简单的应用程序,加载和显示图像can be found here

要了解如何访问矩阵元素(像素),您可以查看以下线程:

OpenCV’s C++ interface 简要介绍了cv::Mat。 Stackoverflow 上有很多关于 OpenCV 的帖子,周围有很多有价值的内容,您可以通过使用搜索框受益匪浅。

This page 有一系列专注于 OpenCV 的书籍/教程/安装指南,但 this the newest official tutorial

【讨论】:

  • 对于只想访问 .bmp 像素的人来说,一个庞大而复杂的计算机视觉库是不是有点矫枉过正?
  • 在 Linux 上,OpenCV 库占用不到 16MB。我不知道您的设备中有多少空间,但我不会说它很大。关于它很复杂,我强烈反对:the test application 加载/显示图像表明它可以使事情变得更容易。有其他方法的时候自己写代码读取bmp头好像有点过头了。
  • 好吧,考虑到您可以下载一个简单的跨平台头文件,如果包含它,则允许您加载 .bmp 文件,我认为 16 MB 的库差不多矫枉过正的定义。 ;)
猜你喜欢
  • 2015-12-12
  • 2012-08-14
  • 2017-03-16
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2012-02-17
  • 2016-03-26
  • 1970-01-01
相关资源
最近更新 更多