opencv 构造函数简单认知

MAT类

由cvmat与IplImage发展而来,具有自动管理内存功能,并提供少量c++接口。

python numpy 创建对象

mat 头部(储存行与列,数据类型)

赋值:新对象指向内存地址

克隆与拷贝:复制一个新的数据

  克隆:clone

  复制: copyto

  空白:mat::zeros(size(,),类型);

      mat::ones(size(,),类型),仅限单通道

宽度:列数 高度:行数 通道数:channels

创建MAT对象

常用构造函数

Mat::Mat(); 无参构造方法

Mat::Mat(int rows, int cols, int type)
创建行数为 rows,列数为 col,类型为 type 的图像;

Mat::Mat(Size size, int type)
创建大小为 size,类型为 type 的图像;

 Mat::Mat(int rows, int cols, int type, const Scalar& s)

创建行数为 rows,列数为 col,类型为 type 的图像,并将所有元素初始
化为值 s;

 

Mat::Mat(Size size, int type, const Scalar& s)
创建大小为 size,类型为 type 的图像,并将所有元素初始化为值 s;

Mat::Mat(const Mat& m)
将 m 赋值给新创建的对象,此处不会对图像数据进行复制,m 和新对象
共用图像数据;(复制构造函数)

Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
创建行数为 rows,列数为 col,类型为 type 的图像,此构造函数不创建
图像数据所需内存,而是直接使用 data 所指内存,图像的行步长由 step
指定。
 Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP)
创建大小为 size,类型为 type 的图像,此构造函数不创建图像数据所需
内存,而是直接使用 data 所指内存,图像的行步长由 step 指定。
Mat::Mat(const Mat& m, const Range& rowRange, const Range& colRange)
创建的新图像为 m 的一部分,具体的范围由 rowRange 和 colRange 指
定,此构造函数也不进行图像数据的复制操作,新图像与 m 共用图像数
据;
Mat::Mat(const Mat& m, const Rect& roi)
创建的新图像为 m 的一部分,具体的范围 roi 指定,此构造函数也不进
行图像数据的复制操作,新图像与 m 共用图像数据。

(与前者类似,只是确定内存,并不自动分配内存)

这些构造函数中,很多都涉及到类型type。type可以是CV_8UC1,CV_16SC1,…,
CV_64FC4 等。里面的 8U 表示 8 位无符号整数,16S 表示 16 位有符号整数,64F
表示 64 位浮点数(即 double 类型);C 后面的数表示通道数,例如 C1 表示一个
通道的图像,C4 表示 4 个通道的图像,以此类推。

 

 

 

create()函数创建对象

Mat M(2,2, CV_8UC3);//构造函数创建图像
M.create(3,2, CV_8UC2);//释放内存重新创建图像

需要注意的时,使用 create()函数无法设置图像像素的初始值。

posted @ 2021-01-24 11:56  KAVEI  阅读(134)  评论(0编辑  收藏  举报