一、数据转换

1、Mat——>vector<Point3f>:

Mat m;
vector<Point3f> p;
p=Mat_<Point3f>(m)

2、vector<Point3f> ——> Mat:

vector<Point3f> p;
Mat m=Mat(p);

3、vector<Point3f> ——> vector<vector<Point3f>>

vector<Point3f> p1,p2,p3;
vector<vectoe<Point3f>> pp;
pp.pushback(p1);
pp.pushback(p2);
pp.pushback(p3);

4、vector<vector<Point3f>> ---> Mat

vector<vector<Point3f>> p;
Mat pm((int)p.size(), p[0].size(), CV_32FC3);  for( int i = 0; i < (int)p.size(); i++ )
{  Mat r = pm.row(i).reshape(3, pm.cols);  Mat pm1(p[i]);  pm1.copyTo(r);
}

二、Opencv实现Mat与vector互转

1、Mat与vector互转

#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;/***************** Mat转vector **********************/
template<typename _Tp>
vector<_Tp> convertMat2Vector(const Mat &mat)
{return (vector<_Tp>)(mat.reshape(1, 1));//通道数不变,按行转为一行
}/****************** vector转Mat *********************/
template<typename _Tp>
cv::Mat convertVector2Mat(vector<_Tp> v, int channels, int rows)
{cv::Mat mat = cv::Mat(v);//将vector变成单列的matcv::Mat dest = mat.reshape(channels, rows).clone();//PS:必须clone()一份,否则返回出错return dest;
}int main()
{/* char ->CV_8SC* unsigned char,uchar ->CV_8UC* unsigned short int,ushort->CV_16UC* short int->CV_16SC* int   ->CV_32SC* float ->CV_32FC* double->CV_64FC*/Mat srcDate=Mat(3,3,CV_32FC3,Scalar(2));vector<float> v = convertMat2Vector<float>(srcDate);cv::Mat dest = convertVector2Mat<float>(v, 3, 3);//把数据转为3通道,3行的Mat数据cout << "dest=\n" << dest << endl;system("pause");waitKey();return 0;
}

2、Mat与数组互转

使用Mat存储数据,并读取相应元素

    Mat mean = (cv::Mat_<float>(2, 1) << 0.4404, 0.3111);cout << "mean=" << mean << endl;float a = mean.at<float>(0, 0);float b = mean.at<float>(1, 0);

将数组内容传递给Mat

unsigned char cbuf[height][width];
cv::Mat img(height, width, CV_8UC1, (unsigned char*)cbuf);

三、

ppoutput的区别在于:ppvector<vector<Point3f>>outputvector<Point3f>

#include<opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{//定义3*1的矩阵m1、m2、m3Mat m1 = Mat(3, 1, CV_32F, Scalar(1));Mat m2 = Mat(3, 1, CV_32F, Scalar(2));Mat m3 = Mat(3, 1, CV_32F, Scalar(3));//把Mat数组转换成Point3f点vector<Point3f> p1;p1 = Mat_<Point3f>(m1);vector<Point3f> p2;p2 = Mat_<Point3f>(m2);vector<Point3f> p3;p3 = Mat_<Point3f>(m3);//把Point3f点放入pp中vector<vector<Point3f>> pp;pp.push_back(p1);pp.push_back(p2);pp.push_back(p3);cout << pp[0] << endl;//先把m1m2m3转换成Point3f然后存储在vector<Point3f>中vector<Point3f> output;output.push_back(Point3f(m1.at<Point3f>(0, 0)));output.push_back(Point3f(m2.at<Point3f>(0, 0)));output.push_back(Point3f(m3.at<Point3f>(0, 0)));cout << output << endl;}

数据类型转换--Mat与Vector<Point2f>相关推荐

  1. opencv笔记(三十一)——Mat 矩阵数据类型转换convertTo

    一.数据类型转换 1.一般图像文件格式使用的是unsigned 8bits,对应的数据类型有:CV_8UC1.CV_8UC2,CV_8UC3 其中,CV_8UC3表示3通道8位的unsigned ch ...

  2. 图像位深度 8位 16位 24位 32位区别对比 RGB 真彩色 基本概念:(大小,深度,通道)位深度数据类型转换原理 Mat数据读取(opencv里的imread)

    位深度 位深度是指在记录数字图像的颜色时,计算机实际上是用每个像素需要的二进制数值位数来表示的.计算机之所以能够显示颜色,是采用了一种称作"位"( bit ) 的记数单位来记录所表 ...

  3. C/C++各种数据类型转换汇总

    以下是Windows/Linux系统中常用的C/C++各种数据类型转换汇总: #ifndef FBC_MESSY_TEST_DATA_TYPE_CONVERT_HPP_ #define FBC_MES ...

  4. Java数据类型转换全解

    Java数据类型转换全解 我们知道Java语言是典型的支持面向对象的程序语言,但考虑到有些基本Java数据类型的结构简单,占内存小且存取速度快等优点,Java依然提供了对这些非面向对象的简单Java数 ...

  5. 浅析Java中对象的创建与对象的数据类型转换

    这篇文章主要介绍了Java中对象的创建与对象的数据类型转换,是Java入门学习中的基础知识,需要的朋友可以参考下 Java:对象创建和初始化过程 1.Java中的数据类型     Java中有3个数据 ...

  6. OpenCV实现Mat与vector,Mat与数组互转

    OpenCV实现Mat与vector互转 [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/details/80253066 1.Mat与v ...

  7. [OpenCV] CV_32F与CV_8U之间的数据类型转换

    OpenCV CV_32F与CV_8U之间的类型转换 文章目录 OpenCV CV_32F与CV_8U之间的类型转换 前言 一.OpenCV都有哪些数据类型 二.代码实例 总结 前言 最近在c++使用 ...

  8. 数据类型转换pytorch

    du = torch.ones([2,2]) a = np.array([[1,2],[3,4]],dtype=np.float32) b = torch.from_numpy(a)#数据类型是不变的 ...

  9. tf.cast()数据类型转换

    tf.cast()函数的作用是执行 tensorflow 中张量数据类型转换,比如读入的图片如果是int8类型的,一般在要在训练前把图像的数据格式转换为float32. cast定义: cast(x, ...

最新文章

  1. python编程语法-Python基础及语法(十三)
  2. uva 815之理解诡异的海平线题目之不容易
  3. 利用CSS实现文本省略效果
  4. 使用Microsoft.Office.Interop.Excel时,64位问题
  5. Yarn 资源调度框架
  6. MYSQL——表操作
  7. Android context.getSystemService的简单说明
  8. AD PCB板子长度宽度 PCB板子尺寸大小信息
  9. Linux上安装使用SSH(ubunturedhat)
  10. [MICCAI2019] A Partially Reversible U-Net for Memory-Efficient Volumetric Image Segmentation
  11. Java线程何时放弃CPU时间片
  12. linux卸载软件wine,Ubuntu 卸载wine
  13. 计算机键盘锁不了怎么办,键盘锁住了怎么解锁?键盘锁死了怎么办?
  14. 【牛客网】马三来刷题之回文解码(今日头条2017年客户端实习在线笔试题)
  15. 初级会计最后一个月稳过秘籍
  16. php获取时间到微妙,php 获取毫秒时间戳
  17. CMake 基础用法,掌握 CMake 诀窍
  18. 2020.8.11贝壳找房笔试复盘
  19. leetcode 56. 合并区间
  20. 对于云计算的行业发展,有哪些好的建议?

热门文章

  1. nc608串口服务器型号,康海时代NC608系列产品信息
  2. CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-癫痫发作预测(六)
  3. aix系统中514端口占用取消
  4. 哔哩哔哩视频合并 B站缓存视频合并 安卓版 音视频合并 基于ffmpeg
  5. NJU SE 操作系统期末复习
  6. 开源软件之许可证(三)
  7. pta:2019来了
  8. 用户画像构建(理论篇)
  9. 专题总纲目录 管理类联考 MBA/MEM/MPA/MPACC总纲
  10. SOCKET_RAW 手动封装TCP协议