用于提取RAW图像中RGB通道值的库或方法

时间:2018-08-27 17:57:50

标签: c++ image-processing decoding bmp bitmapimage

我正在寻找一种解决方案,用于不同目的的图像比较。 为了使分析成为可能,我需要访问每个像素通道值。 例如:许多相机都支持的RAW格式。

* 是否有一些开放源代码库可以访问频道, 还是可以直接将其提取为字节值?
* 目前,我正在使用bitmap_image阅读器(Plugin/Preset files are not allowed to export objects),但不是每次都将原始图像转换为BMP进行分析的好主意,我已经将https://github.com/ArashPartow/bitmap与这种用C ++ 14编写的库相关联

谢谢,请提出访问图像数据的最快方法。

1 个答案:

答案 0 :(得分:2)

使用 ImageMagick ,它已安装在大多数Linux发行版中,并且可用于macOS和Windows。

在命令行上:

# Convert NEF raw file to 16-bit RGB data
magick image.nef -depth 16 rgb:image.bin

# Convert CR2 raw file to 8-bit RGB data
magick image.cr2 -depth 8 rgb:image.bin

或在C / C ++中将其与popen()一起使用,并将其写在stdout上:

magick image.dng -depth 16 rgb:-

,然后用C / C ++阅读。


如果您想在阅读前确定图像的尺寸:

magick identify temp.png
temp.png PNG 640x480 640x480+0+0 8-bit Gray 2c 12348B 0.000u 0:00.009

如果使用版本6,则将magick替换为convert,并将magick identify替换为identify


或者,查看NetPBM PPM格式(请参阅P6格式here) 并开发一些代码来阅读它,然后只需使用 ImageMagick 将所有内容转换为PPM格式并阅读,即可在开始时获得尺寸:

magick image.nef -depth 16 ppm:-
magick image.cr2 -depth 8  ppm:- 

请注意,这正是CImg采用的策略。