从 std::vector 创建 OpenCV 垫子的有效方法
efficient way to create an opencv mat from std::vector
如果我想从 std::vector 创建一个 opencv 垫子,我使用以下函数:
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( 中移动矢量数据指针。
为什么不重构,以便getMat
返回一个向量,并在稍后doProcessing()
将向量转换为cv::Mat
:
void doProcessing()
{
//...
vector<double> v = getMat(12.2, 144, ...);
cv::Mat m(100, 100, 1, myData.data(), myData.size());
cout<< m.at<double>(0,0);
//...
}
vector<double> getMat(some parameters){
vector<double> myData;
//do some processing on parameters and myData
return myData;
}
相关文章:
- 在C++中初始化向量映射的最有效方法
- 将此布尔值传递给此函数的最有效方法是什么?
- 比较C++变量的最有效方法
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 存储变量的更有效方法是什么?
- 确保套装新鲜度的有效方法
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 映射唯一值和重复值的有效方法.可以访问键或值的位置
- 在C++事务之间存储大量字符数据的有效方法
- 在unordered_multimap中精确迭代一次每个键的有效方法
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 检查两个向量是否并行的最有效方法
- 从浮点数中删除小数部分但保留类型的有效方法
- 传递非泛型函数的最有效方法是什么?
- 按升序打印矢量的所有元素直到它为空而没有重复项的最有效方法是什么?
- 创建字符串数组的有效方法
- 返回一个引用C++中另一个类对象的对象的有效方法
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 从std::map值中获取密钥的有效方法