试图将 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 *的主要内容,如果未能解决你的问题,请参考以下文章