OpenCV学习(九)之Mat的基本操作_1

实验环境:VS2010 + OpenCV2.4.9.0

参考手册:The OpenCV Tutorials, Release 2.4.9.0

Mat:OpenCV中图像的基本容器,自OpenCV2.0之后的新功能,正在逐渐代替IplImage和CvMat。相比于IplImage和CvMat,Mat型侧重于计算,数学性较高,OpenCV对Mat类型的计算也进行了优化。而CvMat和IplImage类型更侧重于“图像”,OpenCV对其中的图像操作(缩放、单通道提取、图像阈值操作等)进行了优化。在OpenCV2.0之前,OpenCV是完全用C实现的,但是,IplImage类型与CvMat类型的关系类似于面向对象中的继承关系。实际上,CvMat之上还有一个更抽象的基类----CvArr,这在源代码中会常见。根据参考手册看来,Mat类表示一个 n 维的密集数值单通道或多通道数组。它可以用于存储实数或复数值的向量和矩阵、灰度或彩色图像、体素、向量场、点云、张量、直方图 (尽管较高维的直方图存储在SparseMat可能更好)。大概介绍至此,下面学习一些最基本用法:都以main函数的形式列出,头文件略。

1、Mat矩阵的建立

int main(int argc,char** argv)
{
	Mat M(2,2,CV_8UC3,Scalar(0,0,255));
	//Mat M;
	//M.create(4,4,CV_8UC2);
	cout << "M = " << endl <<" " << M << endl << endl;
	system("pause");
	return 0;
}


2、几类基本矩阵的创建

//Define some matrices
int main(int argc,char** argv)
{
	Mat E = Mat::eye(4,4,CV_64F);
	cout << "E = " << endl <<" " << E<< endl << endl;

	Mat ON  = Mat::ones(4,4,CV_32F);
	cout << "ON = " << endl <<" " << ON << endl << endl;

	Mat Z = Mat::zeros(3,3,CV_8UC1);
	cout << "Z = " << endl << " " << Z << endl << endl;
	system("pause");
	return 0;
}


3、小矩阵的创建和矩阵的复制/克隆

//For small matrices,may use comma separated initializers
int main(int argc,char** argv)
{
	Mat C = (Mat_<double>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
	cout << "C = " << endl <<" " << C<< endl << endl;

	//Create a new header for an existing Mat object and clone() or copyTo() it
	Mat rowClone = C.row(1).clone();
	cout << "rowClone = " << endl <<" " << rowClone << endl << endl;

	Mat rowCopy;
	C.row(1).copyTo(rowCopy);
	cout << "rowCopy = " << endl <<" " << rowCopy << endl << endl;
	
	system("pause");
	return 0;
}


4、用随机函数生成矩阵的值,需要设置矩阵的最大最小值

//random function
int main(int argc,char** argv)
{
	Mat R = Mat(3,2,CV_8UC3);
	randu(R,Scalar::all(0),Scalar::all(255));
	cout << "R = " << endl <<" " << R << endl << endl;
	system("pause");
	return 0;
}


5、C++容器和Mat

int main(int argc,char** argv)
{
	//2D Point
	Point2f P(5,1);
	cout << "Point (2D) = " << P << endl << endl;

	//3D Point
	Point3f P3f(2,6,7);
	cout << "Point (3D) = " << P3f << endl << endl;

	//std::vector via cv::Mat
	vector<float> v;
	v.push_back((float)CV_PI);
	v.push_back(2);
	v.push_back(3.01f);
	cout << "Vector of float via Mat = " << Mat(v) << endl << endl;

	//std::vector of points
	vector<Point2f> vPoints(20);
	for(size_t i = 0;i < vPoints.size();i++)
		vPoints[i] = Point2f((float)(i*5),(float)(i % 7));
	cout << "A vector of 2D Points = " << vPoints << endl << endl;
	system("pause");
	return 0;
}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,OpenCV是一个开源计算机视觉和机器学习软件库,用于开发图像和视频处理应用程序。通过使用OpenCV,您可以读取摄像头并显示实时图像,打开视频文件或摄像头文件,并获取视频的相关信息,例如帧宽度、帧高度、帧率和总帧数。 对于学习OpenCV,你可以按照以下步骤进行: 1. 安装OpenCV库:在开始学习OpenCV之前,您需要从OpenCV官方网站下载和安装OpenCV库。根据您的操作系统和编程语言选择合适的版本。 2. 学习基本概念:熟悉OpenCV的基本概念和术语,例如图像和视频的加载、显示、保存以及常用的图像处理操作,如滤波、边缘检测和特征提取等。 3. 掌握OpenCV函数和类:深入了解OpenCV提供的函数和类,例如cv::Mat用于图像和矩阵操作,cv::VideoCapture用于读取和处理视频,以及cv::imshow和cv::waitKey等用于显示图像的函数。 4. 实践项目:通过完成一些实践项目来应用您所学到的知识。例如,利用OpenCV实现人脸检测、目标追踪、图像识别等。 5. 学习资料和资源:查找和阅读OpenCV的官方文档、教程和示例代码,参与开源社区讨论和交流,加入相关的论坛和邮件列表等。 总结起来,学习OpenCV包括安装OpenCV库、学习基本概念、掌握OpenCV函数和类、实践项目以及查找和阅读相关资料和资源。通过不断实践和学习,您将能够更好地理解和应用OpenCV库来开发图像和视频处理应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值