从 java opencv 中的字节数组创建 CV_16UC1 Mat
Posted
技术标签:
【中文标题】从 java opencv 中的字节数组创建 CV_16UC1 Mat【英文标题】:Create CV_16UC1 Mat from byte array in java opencv 【发布时间】:2019-11-20 11:51:26 【问题描述】:我有一个 java 程序,需要从 1D 字节数组(宽度和高度已知)创建 16UC1 类型的 OpenCV 2D Mat。字节数组的大小为 W*H*2,每个像素应由数组中的两个连续字节构成。
在 C++ OpenCV 中这有点微不足道,因为 Mat 构造函数可以采用 (void*) 指针指向数据,但我可以在没有嵌套循环并从两个字节构造每个 uint16 的 Java OpenCV 中做到这一点吗?
【问题讨论】:
【参考方案1】:所以,我最终通过 java.nio ByteBuffer 和 ShortBuffer 将 java byte[] 转换为 short[]。
byte v[] = 0,0, 1,0, -1,0, 0,1, 1,1, -1,1, 0,-1, 1,-1, -1,-1 ;
short s[] = new short[v.length/2];
ByteBuffer.wrap(v).asShortBuffer().get(s);
Mat m = new Mat(3,3, CvType.CV_16UC1);
m.put(0, 0, s);
不过,仍在寻找 OpenCV 原生解决方案。
【讨论】:
以上是关于从 java opencv 中的字节数组创建 CV_16UC1 Mat的主要内容,如果未能解决你的问题,请参考以下文章
如何将从 C++ 发送的 cv::MAT 字节数组转换为 Java 中的位图?