来自无符号短数组的 OpenCV Mat

Posted

技术标签:

【中文标题】来自无符号短数组的 OpenCV Mat【英文标题】:OpenCV Mat from unsigned short array 【发布时间】:2018-02-20 18:42:35 【问题描述】:

我有一个大小为 6400 的无符号短数组,它对应于我想用 OpenCV 显示的 80*80 16 位 1 通道图像。

我创建了一个 CV_16UC1 Mat,但我不知道如何从原始无符号短数组中设置它的数据。

img_data = new unsigned short[80*80];
/* some code that set the unsigned short array elements */

cv::Mat img(80, 80, CV_16UC1, cv::Scalar(0));

img.data = ??? ; // conversion from unsigned short * to uchar *   ????

【问题讨论】:

你可以使用std::memcpy docs.opencv.org/3.1.0/d3/d63/… @DanMašek 正是我想要的。谢谢。 ***.com/a/48207940/3547485 @Silencer 非常有趣的解决方案 :) 【参考方案1】:

您必须使用 mat constructor,它采用用户分配的缓冲区,指示类型为 CV_16UC1。

cv::Mat img(80, 80, CV_16UC1, img_data);

【讨论】:

数据已经是无符号短...第一行应该是CV_16UC1,不需要转换。否则它将把数据解释为 uchar ,然后它会有不同的数据。要添加到您的答案中的一件事是数据不会被复制,并且必须在使用后释放。

以上是关于来自无符号短数组的 OpenCV Mat的主要内容,如果未能解决你的问题,请参考以下文章

无符号短字节数组

从opencv中的像素数组创建矩阵

在C中将无符号短数组转换为字节数组

如何在 C++ 中确定 2D 无符号短指针数组长度

当我想写出无符号短值时获取有符号短值

opencv c++:将图像矩阵从无符号字符转换为浮点数