从 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 中的位图?

Python OpenCV从字节字符串加载图像

如何从字节数组初始化 RGBA cv::Mat?

使用 openCV 在 C++ 中查看灰度 RAW 图像文件

OpenCV - 创建一个垫对象数组

opencv mat的数据类型CV_32FC1变成CV_8UC1