OpenCV学习之七: Mat类和vector类之间的转换

本文深入探讨了在OpenCV框架中如何利用Mat类的构造函数实现从vector到Mat的高效转换,提供了关键代码示例,帮助开发者优化图像处理任务的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenCV Mat类和Vector类之间的转换

     在OpenCV的Mat类的构造函数中有一个构造函数可以直接把vector<XXX>变成Mat类

该构造函数的定义如下:
template 
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); //这个拷贝方式的用法挺牛逼的
}
未完,待续
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值