vector类转换Mat类

前言

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

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

代码:

1
2
3
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

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

posted on   鹅要长大  阅读(9895)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示