如何在Android中加载多通道EXR

时间:2014-08-20 20:12:22

标签: android opencv openexr

我正在使用这样的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或其他方法访问这些额外的通道?

谢谢, 杰森

1 个答案:

答案 0 :(得分:2)

我刚看了一下grfmt_exr.cpp。 ExrDecoder::readHeader()似乎只是假设图像是RGB格式或亮度/色度格式。因此,我认为您不能将imread()与9频道图像一起使用。

OpenCV编解码器构建在OpenCV源包含的ILM OpenEXR库之上,因此如果您想编写一些C ++代码,请参阅http://www.openexr.com/ReadingAndWritingImageFiles.pdfopenexr4j可能是另一种可能性(但我从未使用过它)。