我正在使用这样的OpenCV来加载EXR图像:
String testImgPath = "/storage/sdcard0/test2.exr"; //I know better than to hardcode paths. This is just a test.
Mat mRgba = Highgui.imread(testImgPath, Highgui.CV_LOAD_IMAGE_ANYCOLOR|Highgui.CV_LOAD_IMAGE_ANYDEPTH);
这适用于图像的前3个通道(除了RGB排序)。我可以像这样显示结果矩阵:
Bitmap img = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(mRgba, img);
imgView.setImageBitmap(img);
但是无论我使用imload的标志组合,当我知道我的测试图像包含9个通道时,我从未看到通道数大于3(CV_32FC3)。其中嵌入了3个3通道图像。如何使用OpenCV或其他方法访问这些额外的通道?
谢谢, 杰森
答案 0 :(得分:2)
我刚看了一下grfmt_exr.cpp。 ExrDecoder::readHeader()
似乎只是假设图像是RGB格式或亮度/色度格式。因此,我认为您不能将imread()
与9频道图像一起使用。
OpenCV编解码器构建在OpenCV源包含的ILM OpenEXR库之上,因此如果您想编写一些C ++代码,请参阅http://www.openexr.com/ReadingAndWritingImageFiles.pdf。 openexr4j可能是另一种可能性(但我从未使用过它)。