Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在原始图像中提取RGB通道值的库或方法_C++_Image Processing_Decoding_Bmp_Bitmapimage - Fatal编程技术网

C++ 在原始图像中提取RGB通道值的库或方法

C++ 在原始图像中提取RGB通道值的库或方法,c++,image-processing,decoding,bmp,bitmapimage,C++,Image Processing,Decoding,Bmp,Bitmapimage,我正在寻找一种解决方案,用于不同目的的图像比较。 为了使分析成为可能,我需要访问每个像素通道值。 例如:许多相机支持的原始格式 * 是否有一些开源库可以访问频道, 或者可以直接将其提取为字节值吗? * 目前我正在使用bitmap\u image reader(),但是每次转换原始图像bo-BMP进行分析都不是一个好主意,我已经介绍过,它是一种在C++14上编写的库 请建议访问图像数据的最快方式,谢谢。使用ImageMagick,它安装在大多数Linux发行版上,可用于macOS和Windows

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

* 是否有一些开源库可以访问频道, 或者可以直接将其提取为字节值吗?
* 目前我正在使用bitmap\u image reader(),但是每次转换原始图像bo-BMP进行分析都不是一个好主意,我已经介绍过,它是一种在C++14上编写的库


请建议访问图像数据的最快方式,谢谢。

使用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
格式) 然后开发一些代码来读取它,然后使用ImageMagick将任何内容转换为
PPM
格式并读取,这将在开始时为您提供尺寸:

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

请注意,这正是。

ffmpeg采用的策略?还是opencv?你自己试过什么吗?还有,你指的是什么原始格式,显然有几种可用的格式?[我不是专家]但通常质量的相机的格式,据我所知,几乎是无损的,命名为原始格式。例如,JPEG有大量的压缩来减少文件大小——从质量角度来看,它不是一种好格式。帕姆,你有什么建议吗?谢谢回复这取决于…JPEG可以是无损的,在这种情况下它是完全可逆的,和bmp一样好。但唯一的方法是从相机中获取这两个东西并进行比较,或者查看JPEG比特流。我没有使用ffmpeg进行原始到bmp的转换,但这将是我的第一个调用端口(默认情况下我没有ImageMagick)。我可以逐个访问它们RGB->RGB?你有一些例子的来源链接吗?谢谢。但是看起来我会使用系统调用(运行Toell MaGik/NETPBM)从原始格式转换成其他格式,然后我需要提取字节,它不可能直接用C++中的打开文件提取值,这是可能的,但是接下来你必须学习
Magick++
库,并编译和链接它——这是可能的,但学习曲线要陡峭得多。在StackOverflow搜索框中放入
[magick++]
作为示例。我建议您使用
popen()
而不是
system()
然后您只需从管道中读取,而无需在磁盘上创建临时文件。请注意,如果您想读取NEF/CR2/DNG文件,您需要安装
dcraw
ufraw
库,ImageMagick可以在其中找到它们。