Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从android.media.Image到Mat_Java_Android_Opencv - Fatal编程技术网

Java 从android.media.Image到Mat

Java 从android.media.Image到Mat,java,android,opencv,Java,Android,Opencv,我正在使用Android Camera2 API从相机获取帧。我可以使用acquireLatestImage()方法获得一个可以读取图像对象的ImageReader 因为我需要处理采集的帧,所以我必须将每个图像对象转换为Mat对象。我想这是一个很常见的问题,所以我希望找到一个方便的OpenCV方法来解决这个问题。但是我没有找到 您对如何使用Android Camera2从相机帧中获取Mat对象有何想法? 谢谢这取决于您为ImageReader类设置的内容。下面的代码假设它使用的是JPEG格式 I

我正在使用Android Camera2 API从相机获取帧。我可以使用acquireLatestImage()方法获得一个可以读取图像对象的ImageReader

因为我需要处理采集的帧,所以我必须将每个图像对象转换为Mat对象。我想这是一个很常见的问题,所以我希望找到一个方便的OpenCV方法来解决这个问题。但是我没有找到

您对如何使用Android Camera2从相机帧中获取Mat对象有何想法? 谢谢

这取决于您为ImageReader类设置的内容。下面的代码假设它使用的是JPEG格式

Image image = reader.acquireLatestImage();

Mat buf = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC1);

ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);
buf.put(0, 0, bytes);

// Do note that Highgui has been replaced by Imgcodecs for OpenCV 3.0 and above
Mat mat = Highgui.imdecode(buf, IMREAD_COLOR);

image.close();

请注意,imdecode相当慢。我不完全确定,但我认为转换为Mat对象会更快,但我自己还没有弄清楚如何转换。我看到了将YUV转换为Mat的尝试,

如果可以先将android.media.Image转换为位图,那么这样做可能会显著影响您的处理时间。另外,请看一下如何从android.media.Image中检索字节数组。OpenCV的JavaCameraView的源代码还展示了如何通过该方法将字节数组转换为mat。请注意,这都是理论上的,我不确定这是否可行。