【拜小白opencv】12-Mat类常用的几种创建方法及clone(),copyTo()的使用

来源:互联网 发布:回也闻一以知十 编辑:程序博客网 时间:2024/06/05 22:46

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

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

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


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


在前几节中,我们创建Mat类的对象,可以imread()读取图像,其实Mat类表示一个n维的密集数值单通道或多通道数组,它可用于存储实数或复数的向量和矩阵、灰度或彩色图像、体素、向量场、点云、直方图等。

Mat类由两个数据部分组成:矩阵头(包含矩阵尺寸、存储方法、存储地址等信息)和一个指向存储所有像素的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针。

下面通过代码来看看,Mat类的几种创建方法。


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

代码演示

/*功能:新建Mat类的几种方法*/#include <opencv2/core/core.hpp>    #include <opencv2/highgui/highgui.hpp>    #include <opencv2/imgproc/imgproc.hpp>   #include <iostream>using namespace std;using namespace cv;int main(){//方法1:创建无初始化矩阵Mat image1;//方法二:创建4行6列类型为8位单通道矩阵Mat image2(4, 6, CV_8UC1);//方法三:创建大小为4×3类型为8位3通道矩阵;为3行4列,每三个数为一组。Mat image3(Size(4, 3), CV_8UC3);//方法四:创建一个用1+3j填充的2×4复矩阵;为2行4列,每两个数为一组。Mat image4(2, 4, CV_32FC2, Scalar(1, 3));//方法五:创建大小为5×3类型为8位3通道矩阵;为3行5列,每三个数为一组。Mat image5(Size(5, 3), CV_8UC3, Scalar(1, 2, 3));//方法六:将image2赋值给image6,共用数据对象Mat image6(image2);//方法七:将image2赋值给image6,克隆Mat image7 = image2.clone();//方法八:将image2赋值给image6,复制。注意:方法六、七、八、这三种复制的方法写法!!!Mat image8;image2.copyTo(image8);//输出矩阵结果 cout << "image1 = " << endl << image1 << endl << endl;cout << "image2 = " << endl << image2 << endl << endl;cout << "image3 = " << endl << image3 << endl << endl;cout << "image4 = " << endl << image4 << endl << endl;cout << "image5 = " << endl << image5 << endl << endl;cout << "image6 = " << endl << image6 << endl << endl;cout << "image7 = " << endl << image7 << endl << endl;cout << "image8 = " << endl << image8 << endl << endl;system("pause");//作用:暂停黑窗口,否则窗口一闪而过,看不见信息  return 0;}
======================分割线===================

显示结果


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

程序说明

每行代码的意思,程序里已详细注释了。由于image6,image7,image8是复制image2,所以它们四个是一样的。
Scalar()表示具有4个元素的数组,是一个表示颜色的类,一般只会用到前三个参数,它的使用在后续的内容里可以慢慢体会它的奇妙作用。
这里解释下形如CV_8UC3 的意思
形如: CV_[位数][带符号与否][类型前缀]C[通道数]
那么 CV_8UC3表示使用8位的unsigned char类型,每个像素由三个元素组成三通道。

===========================END===================
原创粉丝点击