我正在用CIMG加载一个图像,如下所示:
CImg<unsigned char> image("lena.png");
我如何知道该图像的四个通道表示RGBA颜色,而不是CMYK?我知道CImg<>::spectrum()给出了频道的数量,但甚至文档也说“像素值的含义与频道的数量没有关联(例如,4通道图像可能代表RGBA或CMYK彩色图像)”。
我已经搜索了文档和教程,但是似乎没有功能告诉我通道数据的含义.
那么,我怎么知道我正在处理的数据呢?我可以假设所有新加载的图像都在RGB或RGBA中吗?
发布于 2018-05-16 15:02:31
如果您的图像是PNG格式的,则必须是RGB或RGBA,因为PNG不支持CMYK。
如果是JPEG,我假设它在sRGB颜色空间中,但是您可以首先使用以下方法检查ImageMagick:
identify -format "%[colorspace]" YourImage.xxx我使用Imagemagick生成了一个CMYK映像,并使用CImg加载了它。它似乎不执行任何转换作为颜色空间的结果,只返回每个像素的第一个字节为红色(虽然它在现实中是青色),第二个作为绿色(虽然它是洋红色)等等……
我还用调试信息编译了CImg,cimg_use_jpeg定义为1 (因此它使用了libjpeg),并逐步完成了它。它可以在jpeg_info_struct in function _load_jpeg中看到图像是CMYK,但是它忽略了这个信息--我猜您可以修补CImg并修改一个全局变量来很容易地存储颜色空间--如果您喜欢的话!或者你可以通过CImg GitHub页面请求é这样做,他确实回复了.

这里有一个可能的解决办法。如果不使用cimg_use_jpeg、cimg_use_png或cimg_use_tiff构建,CImg将将读取文件委托给名为convert的cimg_use_jpeg命令行工具。然后,它将图像转换为PNM格式(在管道中,而不是在磁盘上),CImg将从管道中读取数据。至关重要的是,ImageMagick总是将正在写入PNM格式的图像转换为sRGB颜色空间,因此如果您让ImageMagick转换您的图像(通过不使用CImg的内置库),您的图像将始终在sRGB颜色空间中读取。实际上,CImg在将文件委托给ImageMagick时这样做是为了读取文件。
convert input.jpg pnm:-并读取输出。
您将注意到,当sRGB CImg委托给ImageMagick时,您的4通道(以前的CMYK)映像突然变成了3通道(现在的CMYK)图像,因为ImageMagick的输出是一个,必然是3通道的PNM文件。
如果你想更进一步..。
如果设置了一个环境变量,则可以控制CImg查找convert的位置,这样就可以将其指向真实的ImageMagick convert周围的自己的“包装器”。
因此,具体地说,如果你这样做了:
export cimg_convert_path="/Users/YourUser/bin/convertWrapper"在运行包含CImg的任何内容之前,或在程序开始时,使用:
setenv("cimg_convert_path","/Users/YourUser/bin/convertWrapper",1);CImg将运行以下命令来加载文件:
/Users/YourUser/bin/convertWrapper input.jpg pnm:-因此,我建议在那个包装文件中,您可以修改传递给convert的参数,这样它实际上可以执行其他操作:
convert input.jpg -auto-level pnm:-因此,convertWrapper将包含:
#!/bin/bash
# Pick up arguments and put in array
args=( "$@" )
# Remove last argument ("pnm:-")
unset 'args[${#args[@]}-1]'
# Add our "-auto-level" parameter in before last item
args+=("-auto-level")
# Re-append "pnm:-"
args+=("pnm:-")
# Debug output to /tmp/a
echo "BEFORE: $@" >> /tmp/a
echo "AFTER: ${args[@]}" >> /tmp/a
# Call real "convert" with modified parameters
/usr/local/bin/magick "${args[@]}"这种方法意味着您不需要修改CImg。
https://stackoverflow.com/questions/50374103
复制相似问题