Android opencv加载灰度为16位的灰度png

时间:2016-01-27 15:42:05

标签: java android opencv opencv4android

我是opencv4android的新手,并尝试加载16位深度的灰度png图像。

我试过了:

Mat mat2DImg = Utils.loadResource(getBaseContext(), R.drawable.image, Highgui.CV_LOAD_IMAGE_GRAYSCALE);

但是png读取为8位,值为[0,255]。我尝试了CV_LOAD_IMAGE_ANYDEPTH标志但是相同。我试图创建一个alpha通道或将图像加载为原始图像,但没有设法让它工作。

我还尝试在设备上复制图像并使用imread读取,如下所示希望imread可以加载16位通道:

java.lang.String filename = "/storage/emulated/0/image.png";
Mat mat2DImg = Highgui.imread(filename, 0);

当我检查file.exists()时,它确实存在。返回的Mat不为null,但为空。

有人可以建议一种正确加载图像的方法吗?

2 个答案:

答案 0 :(得分:0)

我只是设法让它工作:

1)在Manifest中添加:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/ >

这将删除空图像问题。

2)使用CV_LOAD_IMAGE_ANYDEPTH标志

加载图像
rgbLoadedImage = Highgui.imread(filename, Highgui.CV_LOAD_IMAGE_ANYDEPTH);

值现在处于正确的16位范围内。

答案 1 :(得分:-1)

使用此代码,它将为您提供rgb图像

String filename = "/storage/emulated/0/image.png";

File file = new File(filename);

Mat image= Highgui.imread(filename, 0);//temp mat
Mat mat2DImg;
if (image.width() > 0) {

        mat2DImg = new Mat(image.size(), image.type());

        Imgproc.cvtColor(image, mat2DImg, Imgproc.COLOR_BGR2RGB);// you can use Imgproc.COLOR_BGR2GRAY to get a gray image

        Log.d(TAG, "mat2DImg: " + "chans: " + image.channels() + ", ("
                + image.width() + ", " + image.height() + ")");

        image.release();
        image = null;
    }