我是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,但为空。
有人可以建议一种正确加载图像的方法吗?
答案 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;
}