gpt4 book ai didi

c++ - 使用 cv::Mat1f 作为 cv::Mat

转载 作者:行者123 更新时间:2023-12-03 12:49:58 29 4
gpt4 key购买 nike

我有这个方法:

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com