首页 > 解决方案 > 将 ByteBuffer 转换为 OpenCV Mat

问题描述

我想将 Bytebuffer 转换为 OpenCV Mat 是一种有效的方式。

肮脏的解决方案是首先使用copyPixelsFromBuffer创建一个位图

Bitmap bmp = Bitmap.createBitmap(640, 480, Bitmap.Config.ARGB_8888);
bmp.copyPixelsFromBuffer(frame);

然后使用 OpenCV utils 将 Bitmap 转换为 Mat。

Mat mat = new Mat();
Utils.bitmapToMat(bmp, mat);

这很慢

请帮我一个优雅的解决方案

标签: androidopencvimage-processingjava-native-interface

解决方案


使用以下解决方案非常容易。假设这frame是输入ByteBuffer

byte[] data = new byte[frame.capacity()];
((ByteBuffer) frame.duplicate().clear()).get(data);
Mat mat = new Mat(480, 640, CvType.CV_8UC4);
mat.put(0, 0, data);

推荐阅读