我有这个方法:
static void WriteMatVect(const std::string& filename, const std::vector<cv::Mat>& mats);
...
void FileSystem::WriteMatVect(const std::string& filename, const std::vector<cv::Mat>& mats){
size_t size = mats.size();
FileSystem::saveArray(&size,1,filename);
if(mats.empty()){
std::cerr<<"error WriteMatVect: no cv::Mat in mats"<<std::endl;
return;
}
for(size_t i=0 ; i<mats.size() ; i++)
FileSystem::WriteMat(filename, mats[i], true);
}
这称为传递 std::vector<cv::Mat1f>
如mats
。但这会返回以下错误:
../FileSystem.hpp:28:14: note: no known conversion for argument 2 from ‘std::vector<cv::Mat_<float> >’ to ‘const std::vector<cv::Mat>&’
一个简单的解决方法可能是改变 WriteMatVect
使用std::vector<cv::Mat1f>& mats
签名,但这将使 WriteMatVect
太严格了(它只适用于浮点矩阵),而我想尽可能通用。我想到的唯一解决方案是使用模板,所以 const std::vector<T> &mats
。还有其他解决方案吗?
最佳答案
一个Mat1f
可转换为Mat
,但是 vector<Mat1f>
不可转换为 vector<Mat>
.
一个简单的解决方法是复制您的 vector<Mat1f>
到正确的vector<Mat>
。请记住,数据不会被复制,所以它不应该那么慢。
vector<Mat1f> v;
...
vector<Mat> u;
u.reserve(v.size());
for(const auto& m : v) { u.push_back(m); }
WriteMatVect(u);
关于c++ - 使用 cv::Mat1f 作为 cv::Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41764383/