zoukankan      html  css  js  c++  java
  • vector类转换Mat类

    前言

      一个个数据push back到vector之后,可以使用Mat()函数将vector类型转换为Mat类型。

     在opencv中Mat类的构造函数中有一个构造函数可以直接把vector类转换为Mat类。

    代码:

    std::vector<int> responses;
    cv::Mat tres;
    tres = Mat(responses, true);//vector2mat
    

    该构造函数的定义如下(在mat.hpp文件中):

    template<typename _Tp> inline Mat::Mat(const vector<_Tp>& vec, bool copyData)
        : flags(MAGIC_VAL | DataType<_Tp>::type | CV_MAT_CONT_FLAG),  //Mat的基本数据类型与vector保持一致
        dims(2), rows((int)vec.size()), cols(1), data(0), refcount(0),//生成的Mat是只有1列,行数等于vector.size()的矩阵
        datastart(0), dataend(0), allocator(0), size(&rows)
    {
        if(vec.empty())  //如果vector对象内部没有元素的话,直接返回空矩阵
            return;
        if( !copyData )  //判断是否需要拷贝数据
        {   //如果不需要Copy数据,则直接生成一个以Mat方式操纵vector的Mat索引头
            step[0] = step[1] = sizeof(_Tp);
            data = datastart = (uchar*)&vec[0];
            datalimit = dataend = datastart + rows*step[0];
        }
        else  //将vector内部的数据也完全拷贝一份给mat
            Mat((int)vec.size(), 1, DataType<_Tp>::type, (uchar*)&vec[0]).copyTo(*this); //这个拷贝方式的用法非常好!
    }

    注意:copyData的值意味着Mat类型的变量是浅拷贝还是深拷贝.

    参考:

    1.http://blog.csdn.net/zhjm07054115/article/details/26988581

    2.http://blog.csdn.net/u011484045/article/details/44134201

    做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。

  • 相关阅读:
    禁止浏览器缩放功能。
    布局
    设置页面大小
    常用英语
    iOS沙盒路径的简单介绍
    关于 pragma使用
    3Dtouch API Peek and Pop
    3Dtouch API Home Screen Quick Actions
    创建一个.framework静态库
    新学期和学生一起尝试使用博客
  • 原文地址:https://www.cnblogs.com/happyamyhope/p/7244444.html
Copyright © 2011-2022 走看看