android - 将 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);
这很慢
请帮我一个优雅的解决方案
解决方案
使用以下解决方案非常容易。假设这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);
推荐阅读
- java - 如何在寻找最长公共子串 [DP] 时获得空间复杂度 O(n)?
- sql - 如何在单个 Where 子句 SQL 中包含多个条件
- android-studio - MqttAndroidClient.connect() 到树莓派
- javascript - 避免 Veracode CWE-80:jquery htm() 方法中与脚本相关的 HTML 的不正确中和
- angular - 我正在使用primeng auto-complete 5.2.4,我需要显示关于控件焦点的建议
- mysql - MySQL:何时计算虚拟生成列的值?
- c# - Docker 在 VS 中运行,但在发布到 AWS 时出错?错误 CS5001:程序不包含适用于入口点的静态“Main”方法
- android - android上的OpenCV链接错误
- java - 1 - 10000 Java 之间友好数的递归方法
- javascript - 发现我的 .json 文件需要位于公共文件夹 (create-react-app) 中。那是对的吗?