我是靠谱客的博主 贪玩铃铛,最近开发中收集的这篇文章主要介绍【拜小白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类中几种常用函数用法;行、列显示等 代码演示 显示结果程序说明所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部