当前位置: 首页 > 知识库问答 >
问题:

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

景俊拔
2023-03-14

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

我试过:

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

但是png被读取为8bit,值在[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);

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

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

共有2个答案

拓拔俊艾
2023-03-14

使用此代码它会给你一个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;
    }
经兴安
2023-03-14

我只是设法通过以下方式让它发挥作用:

1) 在舱单中添加:

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

这消除了空图像问题。

2) 使用CV\u Load\u image\u ANYDEPTH标志加载图像

rgbLoadedImage = Highgui.imread(filename, Highgui.CV_LOAD_IMAGE_ANYDEPTH);

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

 类似资料:
  • 我想在Javascript中加载一个16位灰度PNG(其中每个像素代表一个数字/深度值。TUM使用这种文件格式来存储深度信息) 然而,opencv读取的图像。js是RGBA 8位(——我想得到CV。CV_16UC1),这似乎是因为图像是由浏览器本身解码的,如文件所示。因此,我们得到的不是一个像素,而是一个介于0和65535(2^8-1)之间的值,而是一个介于0和255(2^8-1)之间的数字,R=

  • 我是第一次使用openCV。我正在使用openCV3和XCode对其进行编码。我想创建一个16位的灰度图像,但我想我有的数据是这样定义的,4000是像素值为白色和0为黑色。我在int类型的数组中有这些像素的信息。如何创建Mat并将数组中的值分配给Mat?

  • def deep(root): if not root: return print root.data deep(root.left) deep(root.right) if __name__ == '__main__': lookup(tree) deep(tree)

  • 我有一个大问题,试图将一个大的科学图像(7MB)16位PNG图像转换为JPG,以便压缩它并检查Python中的任何最终工件。原始图像可在以下位置找到:https://postimg.cc/p5PQG8ry在这里阅读其他答案时,我尝试了枕头和OpenCV,但没有成功。我得到的唯一东西是一张白色的床单。我做错了什么?注释行是使用Python读取16位PNG图像文件的尝试,但似乎不适用于生成数据类型错误

  • 我使用以下代码来获取灰度图像的R、G、B值(它们都将是相同的),但输出给我负值。 为什么会这样?我完全糊涂了。 此处,结果[1]应对应于“R”值。那幺它怎么会是负面的呢?

  • 我无法理解BMP格式,我知道它应该很简单,但不知何故我遗漏了一些东西。我以为它是2个标题,后面是定义图像的实际字节,但数字加起来并不正确。 例如,我只是尝试将此BMP文件加载到内存(640x480 8bpp灰度)中,然后将其写回其他文件。据我所知,有两个不同的标头 BITMAPFILEHEADER 和 BITMAPINFOHEADER。BITMAPFILEHEADER是14个字节,BITMAPIN