前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV图像处理04-Mat对象

OpenCV图像处理04-Mat对象

作者头像
yangjiao
发布2021-03-04 10:45:06
4080
发布2021-03-04 10:45:06
举报
文章被收录于专栏:-csdn迁移-csdn迁移

04-Mat对象

Mat对象与IplImage对象

代码语言:javascript
复制
//Mat对象是OpenCV2.0之后引进的图像数据结构,可以自动分配内存,不存在内存泄漏的问题,是面向对象的结构。分为头部和数据部分两个部分。
//Mat对象构造函数和常用方法
Mat();
Mat(int rows, int cols, int type);
Mat(Size size, int type);
Mat(int rows, int cols, int type, const Scalar &s);
Mat(Size size, int type, const Scalar &s);
Mat(int ndims, const int *sizes, int type);
Mat(int ndims, const int *sizes, int type, const Scalar &s);
void copyTo(Mat mat);
void convertTo(Mat dst, int type);
Mat clone();
int channels();
int depth();
bool empty();
uchar* ptr(i=0);//获取第i行的指针

IplImage在OpenCV发布之后就一直存在,是C语言风格的数据结构,需要开发者自己分配与管理内存,容易导致内存泄漏问题。OpenCV4.*版本已经淘汰该类型。

Mat对象的使用

四个要点:

  • 图像的内存是自动分配的
  • 使用Opencv的c++接口不需要考虑内存分配问题
  • 赋值操作和拷贝构造函数只会复制头部,而不复制Mat对象的数据部分
  • 可以使用clone()或copyTo(Mat mat)两个方法实现完全复制

Mat对象的创建

代码语言:javascript
复制
//1.Mat的构造函数
Mat M(3,3,CV_8UC3,Scalat(0,0,255));
//其中前两个参数代表行和列,CV_8UC3中8表示每个通道占8位,U表示无符号,C表示char类型,3表示通道数为3,第四个参数是向量表示初始化每个像素值是多少,向量长度对应通道数

//2.创建二维数组
int sz[2] = {3,4};
Mat L(2,sz,CV_8UC3,Scalar::all(0)); //L是一个3行4大列(每大列包含规定通道数个(此处为3)小列 )的矩阵 每个元素都是0

//3.create实现
Mat M;
M.create(3,4,CV_8UC3);
M = Scalar(127,127,127);

//4.定义小数组(掩膜)
Mat C = (Mat_<float>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
filter2D(src,dst,-1,C);

//zeros创建全黑图像
Mat G = Mat::zeros(3,3,CV_8UC3);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-01-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 04-Mat对象
    • Mat对象与IplImage对象
      • Mat对象的使用
        • Mat对象的创建
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档