Если я хочу создать мат opencv из std :: vector, я использую следующую функцию:
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())
Этот конструктор не копирует данные, поэтому, когда вектор является временным, и мы возвращаем мат, у него есть недопустимые данные, поэтому я возвращаю их клон, который неэффективен.
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).