OpenCv--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
来源:互联网 发布:js ajax视频教程 编辑:程序博客网 时间:2024/06/07 03:41
(一)Mat矩阵(图像容器)创建时CV_8UC1,CV_8UC2等参数详解
1--Mat不但是一个非常有用的图像容器类,同时也是一个通用的矩阵类2--创建一个Mat对象的方法很多,我们现在先看一下Mat矩阵/图像容器类在OpenCv中的有关源代码:
3--使用Mat图像容器类创建Mat类的对象
//! default constructor Mat(); //! constructs 2D matrix of the specified size and type // (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.) Mat(int rows, int cols, int type); Mat(Size size, int type); //! constucts 2D matrix and fills it with the specified value _s. Mat(int rows, int cols, int type, const Scalar& s); Mat(Size size, int type, const Scalar& s); //! constructs n-dimensional matrix Mat(int ndims, const int* sizes, int type); Mat(int ndims, const int* sizes, int type, const Scalar& s);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
4--使用Matlab风格的函数创建或者初始化Mat类的对象
//! Matlab-style matrix initialization static MatExpr zeros(int rows, int cols, int type); static MatExpr zeros(Size size, int type); static MatExpr zeros(int ndims, const int* sz, int type); static MatExpr ones(int rows, int cols, int type); static MatExpr ones(Size size, int type); static MatExpr ones(int ndims, const int* sz, int type); static MatExpr eye(int rows, int cols, int type); static MatExpr eye(Size size, int type);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
5--我们可以看见,创建Mat矩阵/图像容器类的很多构造方法或者其他成员方法在创建Mat对象的时候,都 需要指定type--所创建图像/矩阵的类型 6--那么类型是什么呢?OpenCv的源代码中说了一句:
(_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)
- 1
- 2
- 1
- 2
7--同样,我们通过转到定义法,看一下CV_8UC1,CV_64FC3等这些宏到底是什么,OpenCv的源代码显示 如下(源代码在在types_c.h中):
#define CV_CN_MAX 512#define CV_CN_SHIFT 3#define CV_DEPTH_MAX (1 << CV_CN_SHIFT)#define CV_8U 0#define CV_8S 1#define CV_16U 2#define CV_16S 3#define CV_32S 4#define CV_32F 5#define CV_64F 6#define CV_USRTYPE1 7#define CV_MAT_DEPTH_MASK (CV_DEPTH_MAX - 1)#define CV_MAT_DEPTH(flags) ((flags) & CV_MAT_DEPTH_MASK)#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))#define CV_MAKE_TYPE CV_MAKETYPE#define CV_8UC1 CV_MAKETYPE(CV_8U,1)#define CV_8UC2 CV_MAKETYPE(CV_8U,2)#define CV_8UC3 CV_MAKETYPE(CV_8U,3)#define CV_8UC4 CV_MAKETYPE(CV_8U,4)#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n))#define CV_8SC1 CV_MAKETYPE(CV_8S,1)#define CV_8SC2 CV_MAKETYPE(CV_8S,2)#define CV_8SC3 CV_MAKETYPE(CV_8S,3)#define CV_8SC4 CV_MAKETYPE(CV_8S,4)#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n))#define CV_16UC1 CV_MAKETYPE(CV_16U,1)#define CV_16UC2 CV_MAKETYPE(CV_16U,2)#define CV_16UC3 CV_MAKETYPE(CV_16U,3)#define CV_16UC4 CV_MAKETYPE(CV_16U,4)#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n))#define CV_16SC1 CV_MAKETYPE(CV_16S,1)#define CV_16SC2 CV_MAKETYPE(CV_16S,2)#define CV_16SC3 CV_MAKETYPE(CV_16S,3)#define CV_16SC4 CV_MAKETYPE(CV_16S,4)#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n))#define CV_32SC1 CV_MAKETYPE(CV_32S,1)#define CV_32SC2 CV_MAKETYPE(CV_32S,2)#define CV_32SC3 CV_MAKETYPE(CV_32S,3)#define CV_32SC4 CV_MAKETYPE(CV_32S,4)#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n))#define CV_32FC1 CV_MAKETYPE(CV_32F,1)#define CV_32FC2 CV_MAKETYPE(CV_32F,2)#define CV_32FC3 CV_MAKETYPE(CV_32F,3)#define CV_32FC4 CV_MAKETYPE(CV_32F,4)#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))#define CV_64FC1 CV_MAKETYPE(CV_64F,1)#define CV_64FC2 CV_MAKETYPE(CV_64F,2)#define CV_64FC3 CV_MAKETYPE(CV_64F,3)#define CV_64FC4 CV_MAKETYPE(CV_64F,4)#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
8--这里的type可以是任何的预定义类型,预定义类型的结构如下所示:
CV_<bit_depth>(S|U|F)C<number_of_channels>
- 1
- 1
1--bit_depth---比特数---代表8bite,16bites,32bites,64bites---举个例子吧--比如说,如 如果你现在创建了一个存储--灰度图片的Mat对象,这个图像的大小为宽100,高100,那么,现在这张 灰度图片中有10000个像素点,它每一个像素点在内存空间所占的空间大小是8bite,8位--所以它对 应的就是CV_8 2--S|U|F--S--代表---signed int---有符号整形 U--代表--unsigned int--无符号整形 F--代表--float---------单精度浮点型 3--C<number_of_channels>----代表---一张图片的通道数,比如: 1--灰度图片--grayImg---是--单通道图像 2--RGB彩色图像---------是--3通道图像 3--带Alph通道的RGB图像--是--4通道图像
9--通过上面的讲解,现在,我们解读一下OpenCv的源代码:
//【1】CV_8UC1---则可以创建----8位无符号的单通道---灰度图片------grayImg#define CV_8UC1 CV_MAKETYPE(CV_8U,1)#define CV_8UC2 CV_MAKETYPE(CV_8U,2)//【2】CV_8UC3---则可以创建----8位无符号的三通道---RGB彩色图像---colorImg #define CV_8UC3 CV_MAKETYPE(CV_8U,3)//【3】CV_8UC4--则可以创建-----8位无符号的四通道---带透明色的RGB图像 #define CV_8UC4 CV_MAKETYPE(CV_8U,4)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
(二)Mat矩阵图像容器类创建Mat类对象常用的几种方法:
1)使用Mat矩阵图像容器类的构造函数创建Mat类对象
//【1】载入原始图像1.jpg Mat srcImg=imread("1.jpg",1); //【2】创建一个和原始图像srcImg高和宽一致的8位无符号单通道的灰度图片容器,并且初始化图片为白色255 Mat grayImg(srcImg.rows,srcImg.cols,CV_8UC1,Scalar(255));
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
2)为已经存在的IplImage指针创建信息头
//【1】声明IplImg指针 IplImg* imgTopDown; //【2】将图片加载到内存中 imgTopDown=cvLoadImage("1.jpg", CV_LOAD_IMAGE_GRAYSCALE); //【3】为已经存在的imgTopDown指针创建信息头 //【4】转换IplImage*--->Mat Mat mtx(imgTopDown);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
3)利用Create()函数创建Mat矩阵图像容器类的对象
//【1】载入原始图像1.jpg Mat srcImg=imread("1.jpg",1); //【2】创建一个和原始图像srcImg高和宽一致的8位无符号单通道的灰度图片容器,并且初始化图片为白色255 Mat dstImg.create(srcImg.rows,srcImg.cols,CV_8UC1);
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
4)使用Matlab风格的函数创建Mat矩阵图形容器类的对象
//! Matlab-style matrix initialization static MatExpr zeros(int rows, int cols, int type); static MatExpr zeros(Size size, int type); static MatExpr zeros(int ndims, const int* sz, int type); static MatExpr ones(int rows, int cols, int type); static MatExpr ones(Size size, int type); static MatExpr ones(int ndims, const int* sz, int type); static MatExpr eye(int rows, int cols, int type); static MatExpr eye(Size size, int type); //【1】载入原始图像1.jpg Mat srcImg=imread("1.jpg",1); //【2】创建一个和原始图像srcImg高和宽一致的8位无符号单通道的灰度图片容器,并且初始化图片为白色255 Mat dstImg=Mat::zeros(srcImg.rows,srcImg.cols,CV_8UC3); Mat dstImg=Mat::ones(srcImg.rows,srcImg.cols,CV_8UC3); Mat dstImg=Mat::eye(srcImg.rows,srcImg.cols,CV_8UC3);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 2
- 踩
- 1
- 上一篇OpenCv学习笔记--支持向量机SVM之C++的实现(1)
- 下一篇OpenCv学习笔记(1)---CvTermCriteria---迭代算法终止条件结构体的---OpenCV源码分析
相关文章推荐
- • OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
- • 【直播】机器学习&数据挖掘7周实训--韦玮
- • 【OpenCV学习笔记 009】图像滤波
- • 【直播】如何高速通过软考--任铄
- • OpenCv学习笔记(四)--Mat基本图像容器Mat对象信息头,矩阵体的创建,深复制,浅复制详解
- • 【直播】打通Linux脉络 进程、线程和调度--宋宝华
- • 【OpenCV学习笔记 012】估算图像间的投影关系
- • 【套餐】Java高级程序员专业学习路线--肖海鹏
- • OpenCV学习笔记(19)关于CV_8UC1,CV_8UC2等参数
- • 【课程】C++语言基础--贺利坚
- • 【OpenCV学习笔记 008】基于形态学运算的图像变换
- • 【课程】深度学习基础与TensorFlow实践--AI100
- • OpenCv学习笔记(二)—cv::Mat学习
- • 【OpenCV学习笔记 007】使用直方图统计像素
- • OpenCV学习笔记(24)CLR模式下System::Drawing::Bitmap与cv::Mat图像格式的转换
- • 【OpenCV学习笔记 011】检测并匹配兴趣点
阅读全文
0 0
- OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
- OpenCv--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
- OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
- Opencv 创建图像时,CV_8UC1,CV_32FC3等参数的含义
- OpenCV学习笔记(19)关于CV_8UC1,CV_8UC2等参数
- CV_8UC1,CV_8UC2,CV_8UC3等意思
- OpenCv学习笔记(四)--Mat基本图像容器Mat对象信息头,矩阵体的创建,深复制,浅复制详解
- opencv Mat - 图像的容器
- OpenCV基本图像容器Mat的几种创建方法
- 转载CV_8UC1,CV_8UC2,CV_8UC3的意思
- OpenCV图像矩阵Mat的基本操作
- CV_8UC1,CV_8UC2,CV_8UC3
- CV_8UC1,CV_8UC2,CV_8UC3
- opencv Mat创建图像
- opencv学习笔记之Mat,图像的新容器
- OpenCV学习笔记——Mat,图像的新容器
- opencv & qt study-(3)-图像的容器--Mat
- OpenCV Mat —— 基本的图像容器
- 转载资深程序员的总结经验
- selenium之unittest批量执行测试用例、生成html报告
- 嵌入式-1 uboot模式烧写镜像文件
- 【LintCode】数组的全排序(1)
- 如何限制checkbox最多勾选个数
- OpenCv--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
- 带空格或逗号的字符串和基础数据类型的互相转换
- Quartz框架学习之一-快速入门
- Mac brew 升级gradle 后降级
- MySQL的保留关键字,使用时尽量避免
- Redis主从复制
- 移动WebApp开发-jQuery Mobile入门
- 常见的加密算法
- fads