【发布时间】:2018-10-15 19:38:52
【问题描述】:
如果我想从 std::vector 创建一个 opencv mat,我使用以下函数:
Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
vector<double> myData;
cv::Mat m(100, 100, 1, myData.data(), myData.size())
这个构造函数不复制数据,所以当向量是 temp 并且我们返回 mat 时,mat 有无效数据,所以我返回它的一个副本,这是低效的。
void doProcessing()
{
//...
Mat m = getMat(12.2, 144, ...);
cout<< m.at<double>(0,0);
//...
}
Mat getMat(some parameters){
vector<double> myData;
//do some processing on parameters and myData
cv::Mat m(100, 100, 1, myData.data(), myData.size());
return m.clone();
}
有没有更好的方法?如何使用 std::move 仅移动指针? 我不想复制数据,只是在 O(1) 中移动向量数据指针。
【问题讨论】:
-
只要您使用
Mat,就必须保留向量,因为向量是唯一保存数据的东西。创建一个包含向量和cv::Mat的结构怎么样(它会是movable)? -
您能否提供代码说明您的实际问题,以便我们提出解决方案?
-
在计算过程中你的向量大小是已知的并且是固定的吗?
-
如果你不想复制,那么只要垫子存在,就保留矢量。