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

标签 c++ opencv c++11

我有这个方法:

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/

相关文章:

opencv - Kinect for XBOX 深度范围限制,用于基于触摸的感应

c++ - linux测时间问题! std::chrono、QueryPerformanceCounter、clock_gettime

c++ - 从 MFC 中的配置文件加载字符串

c++ - 搜索和更新整数值列表最快的数据结构是什么?

c++ - 在互斥量上使用多个 std::unique_lock,FIFO 中的所有线程都等待进程?

c++ - std::function typedef 中的参数名称

c++ - 使用唯一的指针调用函数会使我的程序崩溃

C++ 字符串字符数组

android - 在哪里下载opencv-2.4.6.1-android-arm.jar和ffmpeg-2.0.1-android-arm.jar

python - 无法获取正确的像素颜色图像python