来自无符号短数组的 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的主要内容,如果未能解决你的问题,请参考以下文章