Maksym
Maksym

Reputation: 21

Library or approach to extract RGB channels values in RAW image

I'm searching for a solution for image comparison for different purposes. To make it possible to analyze, I need access to every pixel channels values. For example: RAW format which supported by a lot of cameras.

* Is there some open source library to get access to channels, or is it possible to extract it directly as byte values?
* Currently I'm using bitmap_image reader (https://github.com/ArashPartow/bitmap), but not a good idea to convert everytime raw image bo BMP to analyze, I've related repo added to github, it kind of library written on C++14

Please suggest fastest way to access to data of image, thanks.

Upvotes: 2

Views: 1184

Answers (1)

Mark Setchell
Mark Setchell

Reputation: 207728

Use ImageMagick which is installed on most Linux distros and is available for macOS and Windows.

At the command-line:

# 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

Or use it with popen() in C/C++ and have it write on stdout:

magick image.dng -depth 16 rgb:-

and then read in C/C++.


If you want to identify the dimensions of an image before reading:

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

If using version 6, replace magick with convert, and replace magick identify with identify.


Alternatively, look at NetPBM PPM format (see P6 format here) and develop some code to read it then just convert anything and everything into PPM format with ImageMagick and read that, which gives you the dimensions at the start:

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

Note that this is exactly the strategy adopted by CImg.

Upvotes: 3

Related Questions