【拜小白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===================
阅读全文
0 0
- 【拜小白opencv】12-Mat类常用的几种创建方法及clone(),copyTo()的使用
- OpenCV中Mat操作clone() 与copyto()的区别
- OpenCV中Mat操作clone() 与copyto()的区别
- OpenCV中Mat的传值、传引用、clone()、copyto()
- opencv中Mat类成员函数clone()和copyto()的区别
- OpenCV基本图像容器Mat的几种创建方法
- openCV clone()与copyTo()的区别
- Mat的几种创建方法
- OpenCv学习笔记(五)--创建Mat矩阵对象常用的几种方式
- OpenCV copyTo、clone、“=”与拷贝构造函数的区别
- opencv之图像mat复制copyTo,clone=
- 创建Mat类的几种常见方法
- clone()和copyTo()的区别
- opencv中copyTo函数的使用
- OpenCV笔记(copyto,clone)
- 查看OpenCV中Mat数据的几种方法
- opencv中Mat和数组赋值的几种方法
- OpenCV:通过Mat遍历图像的几种方法
- 学习java一定要有耐心才行!
- Linux下用ifconfig命令设置IP、掩码、网关
- 全文检索引擎Solr系列—–全文检索基本原理
- Java多线程调用多个服务
- mysql FAQ
- 【拜小白opencv】12-Mat类常用的几种创建方法及clone(),copyTo()的使用
- Java抽象类不可创建对象,但可以调用静态方法将建一个对象
- spring 4 restful 服务添加http-basic 验证。
- 第四章 XadminSite
- sum
- HDU 6129Just do it
- Element-UI的表格动态加载数据
- P1605 迷宫
- 深入理解Python中的生成器