栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据类型转换--Mat与Vector<Point2f>

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据类型转换--Mat与Vector<Point2f>

一、数据转换

1、Mat——>vector:

Mat m;
vector p;
p=Mat_(m)

2、vector ——> Mat:

vector p;
Mat m=Mat(p);

3、vector ——> vector>

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

4、vector> ---> Mat

vector> 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 

using namespace cv;
using namespace std;


template
vector<_Tp> convertMat2Vector(const Mat &mat)
{
	return (vector<_Tp>)(mat.reshape(1, 1));//通道数不变,按行转为一行
}


template
cv::Mat convertVector2Mat(vector<_Tp> v, int channels, int rows)
{
	cv::Mat mat = cv::Mat(v);//将vector变成单列的mat
	cv::Mat dest = mat.reshape(channels, rows).clone();//PS:必须clone()一份,否则返回出错
	return dest;
}


int main()
{
	
    Mat srcDate=Mat(3,3,CV_32FC3,Scalar(2));

	vector v = convertMat2Vector(srcDate);
	cv::Mat dest = convertVector2Mat(v, 3, 3);//把数据转为3通道,3行的Mat数据
	cout << "dest=n" << dest << endl;

	system("pause");
	waitKey();
	return 0;
}
2、Mat与数组互转

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

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

将数组内容传递给Mat

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

pp和output的区别在于:pp是vector>而output是vector

#include

using namespace std;
using namespace cv;

int main()
{
    //定义3*1的矩阵m1、m2、m3
	Mat 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 p1;
	p1 = Mat_(m1);
	vector p2;
	p2 = Mat_(m2);
	vector p3;
	p3 = Mat_(m3);

    //把Point3f点放入pp中
	vector> pp;
	pp.push_back(p1);
	pp.push_back(p2);
	pp.push_back(p3);
	cout << pp[0] << endl;
	
	//先把m1m2m3转换成Point3f然后存储在vector中
	vector output;
	output.push_back(Point3f(m1.at(0, 0)));
	output.push_back(Point3f(m2.at(0, 0)));
	output.push_back(Point3f(m3.at(0, 0)));
	cout << output << endl;
	
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/317103.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号