2

我正在使用 OpenCV for Android 来加载 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 或其他方法访问这些额外的频道?

谢谢,杰森

4

1 回答 1

2

我只是快速浏览了一下 grfmt_exr.cpp。ExrDecoder::readHeader()似乎只是假设图像是 RGB 格式或亮度/色度格式。因此我认为你不能使用imread()你的 9 通道图像。

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

于 2014-08-21T01:18:47.600 回答