Reputation: 21
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
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