数据类型转换--Mat与Vector<Point2f>
一、数据转换
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);
三、
pp
和output
的区别在于:pp
是vector<vector<Point3f>>
而output
是vector<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>相关推荐
- opencv笔记(三十一)——Mat 矩阵数据类型转换convertTo
一.数据类型转换 1.一般图像文件格式使用的是unsigned 8bits,对应的数据类型有:CV_8UC1.CV_8UC2,CV_8UC3 其中,CV_8UC3表示3通道8位的unsigned ch ...
- 图像位深度 8位 16位 24位 32位区别对比 RGB 真彩色 基本概念:(大小,深度,通道)位深度数据类型转换原理 Mat数据读取(opencv里的imread)
位深度 位深度是指在记录数字图像的颜色时,计算机实际上是用每个像素需要的二进制数值位数来表示的.计算机之所以能够显示颜色,是采用了一种称作"位"( bit ) 的记数单位来记录所表 ...
- C/C++各种数据类型转换汇总
以下是Windows/Linux系统中常用的C/C++各种数据类型转换汇总: #ifndef FBC_MESSY_TEST_DATA_TYPE_CONVERT_HPP_ #define FBC_MES ...
- Java数据类型转换全解
Java数据类型转换全解 我们知道Java语言是典型的支持面向对象的程序语言,但考虑到有些基本Java数据类型的结构简单,占内存小且存取速度快等优点,Java依然提供了对这些非面向对象的简单Java数 ...
- 浅析Java中对象的创建与对象的数据类型转换
这篇文章主要介绍了Java中对象的创建与对象的数据类型转换,是Java入门学习中的基础知识,需要的朋友可以参考下 Java:对象创建和初始化过程 1.Java中的数据类型 Java中有3个数据 ...
- OpenCV实现Mat与vector,Mat与数组互转
OpenCV实现Mat与vector互转 [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/details/80253066 1.Mat与v ...
- [OpenCV] CV_32F与CV_8U之间的数据类型转换
OpenCV CV_32F与CV_8U之间的类型转换 文章目录 OpenCV CV_32F与CV_8U之间的类型转换 前言 一.OpenCV都有哪些数据类型 二.代码实例 总结 前言 最近在c++使用 ...
- 数据类型转换pytorch
du = torch.ones([2,2]) a = np.array([[1,2],[3,4]],dtype=np.float32) b = torch.from_numpy(a)#数据类型是不变的 ...
- tf.cast()数据类型转换
tf.cast()函数的作用是执行 tensorflow 中张量数据类型转换,比如读入的图片如果是int8类型的,一般在要在训练前把图像的数据格式转换为float32. cast定义: cast(x, ...
最新文章
- python编程语法-Python基础及语法(十三)
- uva 815之理解诡异的海平线题目之不容易
- 利用CSS实现文本省略效果
- 使用Microsoft.Office.Interop.Excel时,64位问题
- Yarn 资源调度框架
- MYSQL——表操作
- Android context.getSystemService的简单说明
- AD PCB板子长度宽度 PCB板子尺寸大小信息
- Linux上安装使用SSH(ubunturedhat)
- [MICCAI2019] A Partially Reversible U-Net for Memory-Efficient Volumetric Image Segmentation
- Java线程何时放弃CPU时间片
- linux卸载软件wine,Ubuntu 卸载wine
- 计算机键盘锁不了怎么办,键盘锁住了怎么解锁?键盘锁死了怎么办?
- 【牛客网】马三来刷题之回文解码(今日头条2017年客户端实习在线笔试题)
- 初级会计最后一个月稳过秘籍
- php获取时间到微妙,php 获取毫秒时间戳
- CMake 基础用法,掌握 CMake 诀窍
- 2020.8.11贝壳找房笔试复盘
- leetcode 56. 合并区间
- 对于云计算的行业发展,有哪些好的建议?