我是靠谱客的博主 贪玩铃铛,最近开发中收集的这篇文章主要介绍【拜小白opencv】13-Mat类中几种常用函数用法;行、列显示等 代码演示 显示结果程序说明,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
博主力求用最简单的语言将此部分内容讲解清楚,但由于博主同样是刚刚接触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+5j
Mat 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========================
最后
以上就是贪玩铃铛为你收集整理的【拜小白opencv】13-Mat类中几种常用函数用法;行、列显示等 代码演示 显示结果程序说明的全部内容,希望文章能够帮你解决【拜小白opencv】13-Mat类中几种常用函数用法;行、列显示等 代码演示 显示结果程序说明所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复