Mat对象

文章介绍了OpenCV中Mat类的内存管理特性,包括如何通过复制构造函数和赋值操作共享数据,以及如何使用clone()和copyTo()函数实现深拷贝。此外,还提到了OpenCV的标准BGR颜色空间以及HSV、HLS、YCrCb和CIEL*a*b*等其他颜色模型。
摘要由CSDN通过智能技术生成
  1. Mat不再需要手动分配内存,并且在不需要时立即释放它。

  1. Mat是一个包含两个数据部分的类:矩阵头(包含矩阵大小,用于存储的方法,矩阵存储的地址)

指向包含像素值的矩阵的指针。

  1. Opencv使用了一个引用技术系统。每个Mat对象都有自己的标头,可以通过让他们的矩阵指针指向同一地址在两个Mat对象之间共享矩阵。复制运算符只会复制指向大矩阵的标头和指针,而不是数据本身。

Mat A,c;        //creates just the header parts
A = imread(argv[1], IMREAD_COLOR);        //here we'll know the method used (allocate matrix)

Mat B(A);        //use the copy constructor

C = A;        //Assignment operator

/*
A C对象都指向同一个数据矩阵,使用其中任何一个修改也会影响另外一个,不同的对象只是为相同的数据提供不同的访问方法。
*/

//创建感兴趣区域
Mat D(A, Rect(10, 10, 100, 100));        //using a rectangle
Mat E = A(Range::all(), Range(1,3));    //using row and column boundaries
  1. 复制矩阵本身,cv::Mat::clone()函数 cv::Mat::copyTp()函数

Mat F = A.clone();
Mat G;
A.copyTo(G);
/*
1.Opencv的输出图像是自动的
2.不需要考虑opencv的C++接口进行内存管理
3.赋值操作和复制构造函数只复制头
4.可以使用cv::Mat::clone()函数和cv::Mat::copyTp()函数构建图像矩阵
*/
  1. 颜色系统:

(1)Opencv标准显示系统使用BGR颜色空间组成颜色。

(2)HSV和HLS将颜色分解为色相,饱和度和值、亮度组件 。

(3)YCrCb被流行的JPEG图像格式所使用。

(4)CIE L*a*b*是一个感知上均匀的颜色空间,用于测量一种颜色到另一种颜色的距离。

  1. cv::Mat::Mat 构造

Mat M(2, 2, CV_8UC3, Scalar(0, 0, 255))
//Scalar()函数用来设置颜色,(0, 0, 255)为红色
cout << "M = " << endl << " " << M << endl << endl;
/*
CV_8UC3含义:
CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number]
*/

int sz[3] = {2, 2, 2};
Mat L(3, sz, CV_8UC(1), Scalae::all(0));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值