三天学会opencv(三)——Mat对象

简介: 三天学会opencv(三)——Mat对象

Mat对象


学习内容


  1. Mat对象与IplImage对象
  2. Mat对象使用
  3. Mat定义数组

Mat对象与IplImage对象


Mat对象OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分。

IplImage是从2001年OpenCV发布之后就一直存在,是C语言风格的数据结构,需要开发者自己分配与管理内存,对大的程序使用它容易导致内存泄漏问题。

总结一下:说白了就是IplImage这个对象他对于操作的容错性比较差,但是Mat类型就没有这个问题,属于OpenCV新时代的产物。

Mat对象构造函数常见的方法:

Mat()
Mat(int rows, int cols, int type)
Mat(Size size, int types)

…等等还有几个,但是我们常用的就是上面的。

常用的方法:

void copyTo(Mat src) // 完全拷贝
void convertTo(Mat dst, int type) // 数据类型的切换
Mat clone() // 深拷贝
int channels() // 获取通道数
int depth() // 图像深度
bool empty() // 是否为空
uchar* ptr(i = 0) // 图像的按行的指针,i等于行数,0位第一行

Mat对象的使用


部分复制:一般情况下只会复制Mat对象的头和指针部分,不会复制数据部分

Mat A= imread(imgFilePath);

Mat B(A) // 只复制

完全复制:如果想把Mat对象的头部和数据部分一起复制,可以通过如下两个API实现

Mat F = A.clone(); 

或者也可以下面这个实现

Mat G; A.copyTo(G);

Mat对象的创建


cv::Mat::Mat构造函数

Mat M(2,2,CV_8UC3, Scalar(0,0,255))

其中前两个参数分别表示行(row)跟列(column)、第三个CV_8UC3中的8表示每个通道占8位、U表示无符号、C表示Char类型、3表示通道数目是3,第四个参数是向量表示初始化每个像素值是多少,向量长度对应通道数目一致

image.png

创建多维数组cv::Mat::create

int sz[3] = {2,2,2};     
Mat  L(3,sz, CV_8UC1, Scalar::all(0));

cv::Mat::create实现

Mat M;
M.create(4, 3, CV_8UC2);
M = Scalar(127,127);
cout << "M = " << endl << " " << M << endl << endl;
uchar* firstRow = M.ptr<uchar>(0);
printf("%d", *firstRow);

image.png

定义小数组


Mat C = (Mat_<double>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);     
cout << "C = " << endl << " " << C << endl << endl;

image.png

相关文章
|
3月前
|
存储 新制造 开发工具
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C++)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C++)
41 2
|
5月前
|
存储 Cloud Native Linux
openCV 图像对象的创建和赋值
openCV 图像对象的创建和赋值
|
6月前
|
存储 编译器 数据库
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV核心类型 Mat
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV核心类型 Mat
|
3月前
|
存储 新制造 开发工具
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C#)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C#)
31 0
|
4月前
|
存储 定位技术 计算机视觉
Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换
Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换
|
4月前
|
计算机视觉
OpenCV(四):Mat支持的运算
OpenCV(四):Mat支持的运算
35 0
|
4月前
|
存储 计算机视觉
OpenCV(三):Mat类数据的读取
OpenCV(三):Mat类数据的读取
88 0
|
4月前
|
存储 Android开发 计算机视觉
OpenCV(二):认识Mat容器
OpenCV(二):认识Mat容器
55 0
|
8月前
|
存储 监控 算法
Baumer工业相机堡盟相机中的JPEG图像压缩相机如何通过BGAPI SDK和OpenCV的Mat进行图像转换(C++)
Baumer工业相机堡盟相机中的JPEG图像压缩相机如何通过BGAPI SDK和OpenCV的Mat进行图像转换(C++)
96 0
|
8月前
|
监控 开发工具 C#
Baumer工业相机堡盟相机BGAPI SDK联合OpenCV进行Mat图像转换(C#)
Baumer工业相机堡盟相机BGAPI SDK联合OpenCV进行Mat图像转换(C#)
68 1