试图将 cv::Mat 数据复制到 uchar *

Posted

技术标签:

【中文标题】试图将 cv::Mat 数据复制到 uchar *【英文标题】:Trying to copy cv::Mat data into uchar * 【发布时间】:2016-03-14 14:11:15 【问题描述】:

我正在尝试使用 c++ 的复制函数将 openCV mat 对象(其类型为 uchar*)的数据复制到 unsigned char* 中,如下所示:

cv::Mat m = cv::imread (path, 0);

uchar * ptr;

std::copy (m.data, ptr, mask.size);

但是,我收到有关复制功能的 26 个语法错误。你能帮我解决这个问题吗?帮助表示赞赏。谢谢。

【问题讨论】:

您是否尝试将整个 mat 数据复制到单个指针?而且,你认为mask.size 会给你什么?你检查了吗? 你在这里搞砸了很多事情。 1) 未初始化的指针 2) std::copy 中的参数错误。您是否打算改用memcpy? 3) 什么是mask?如果您要使用非连续图像,您应该以另一种方式进行。那么,你想做什么?为什么需要uchar*?以及为什么需要将数据复制到uchar Derman 和 Miki 面具应该是“m”。我分配了 m.total() 的内存。 m.size 返回具有宽度和高度的大小对象。因此,当您删除副本的使用时,您是对的。我改用 memcpy,所以现在一切都很好。谢谢! 【参考方案1】:

答案很简单:

// cv::Mat m; // your opencv Mat

uchar* mPtr = new uchar[m.total()];    
std::memcpy(mPtr, m.data, m.total());

这是一个直截了当的问题,抱歉。虽然希望它也可以帮助某人。

【讨论】:

警告:m.total() 仅在您的矩阵是 CV_8UC1 类型时才正确,即单个 8 位(uchar)通道!否则,您将需要***.com/questions/26441072/…

以上是关于试图将 cv::Mat 数据复制到 uchar *的主要内容,如果未能解决你的问题,请参考以下文章

我无法将cv :: Mat保存到1D数组中

如何用指针访问opencv cv::Mat数据?ptr<uchar>()

opencv 将数据从 *Mat 复制到 Mat

opencv cv::mat::data是什么数据类型?

将 cv::Mat 向量复制到浮点向量的最佳方法是啥?

如何将单个图像从图像矢量复制到临时 cv::Mat?