【拜小白opencv】13-Mat类中几种常用函数用法;行、列显示等

来源:互联网 发布:淘宝售后主管如何管理? 编辑:程序博客网 时间:2024/06/16 20:52

博主力求用最简单的语言将此部分内容讲解清楚,但由于博主同样是刚刚接触OpenCV,或许表达上有些错误,还望读者能够指教探讨,大家共同进步。

博主机器配置为:VS2013+opencv2.4.13+Win-64bit。

 如果本人写的能给读者带来一点点的帮助,我就很开心了。


======================分割线===================


OpenCV中提供了许多Mat类的成员函数应用方法,我们要根据实际需要选择适当的方法。见下表:



具体什么意思,上代码演示,看效果。

========================分割线==================


代码演示

/*功能:Mat类中几种常用函数的用法*/#include <opencv2/core/core.hpp>    #include <opencv2/highgui/highgui.hpp>    #include <opencv2/imgproc/imgproc.hpp>   #include <iostream>  using namespace cv;using namespace std;int main(){//【1】创建一个4行6列,类型为8位单通道矩阵Mat image1 = Mat(4, 6, CV_8UC1);randu(image1, Scalar::all(0), Scalar::all(10));//从0到10产生随机数填充矩阵cout << "image1 = " << endl << image1 << endl << endl;//【2】获取矩阵行列数,以及获取指定行列元素。cout << "image1的row:" << image1.rows << endl;cout << "image1的col:" << image1.cols << endl << endl;cout << "取image1的第2行和第3行" << endl << image1.rowRange(1, 3) << endl << endl;cout << "取image1的第1列到第4列" << endl << image1.colRange(0, 4) << endl << endl;//上两行的()括号里,表示取前不取后,即为左闭右开区间。 注意:每行每列起始号为0!!//【3】几种行、列相互赋值方式//image1的第3列元素变换成image1的第6列元素乘2。 注意:每行每列起始号为0!!image1.col(2) = image1.col(5) * 2;cout << "原始image1的第3列元素变换成image1的第6列元素乘2 = " << endl << image1 << endl << endl;//将image2矩阵赋值为image1的第3行。 注意:每行每列起始号为0!!Mat image2 = image1.row(2);cout << "将image2矩阵赋值为image1的第3行 = " << endl << image2 << endl << endl;//将image1矩阵的第2列复制到image2中。 注意:每行每列起始号为0!!image1.col(1).copyTo(image2);cout << "将image1矩阵的第2列复制到image2中 = " << endl << image2 << endl << endl;//创建3×3复数矩阵1+5jMat image3(3, 3, CV_32FC2, Scalar(1, 5));//利用create方法重新创建5×5的8位无符号3通道矩阵image3.create(5, 5, CV_8UC(3));cout << "image3的channels:" << image3.channels() << endl;//转换矩阵类型image3.convertTo(image3, CV_32F);cout << "image3的depth:" << image3.depth() << endl;//zeros创建矩阵,全部为0。 除了zeros()还有ones()、eye()发生。Mat image4 = Mat::zeros(image3.rows, image3.cols, CV_8UC1);cout << "image4 = " << endl << image4 << endl << endl;system("pause");//作用:暂停黑窗口,否则窗口一闪而过,看不见信息 return 0;}

=============分割线===============

显示结果


==================分割线=====================

程序说明

首先我们创建了一个4行6列的矩阵,显示出了它的行、列数。
然后取出它的第2行和第3行,以及第1列到第4列。注意,取的过程是按“区间”来取,左闭右开,且起始为0号位。及0表示第1行(列),1表示第2行(列),依次.....
在最后image4显示为何5行5列呢?
是由于image4是以image3的行列创建的,image3最初创建时为3×3,但在后续步骤中利用create()方法重新改变了它,变为5×5的矩阵了,故image4为5×5矩阵。

============================END========================