core module:Mat - The Basic Image Container

1、制作不必要的潜在大副本会进一步降低程序的速度

①每个Mat对象都有自己的标头,但是可以通过让它们的矩阵指针指向同一地址在两个 Mat 对象之间共享矩阵。此外,复制运算符只会复制指向大矩阵的标头和指针,而不是数据本身。

  • 复制构造函数
  • 赋值运算符

②创建仅引用完整数据的子部分。例如,要在图像中创建感兴趣区域 (ROI),您只需创建一个具有新边界的新标头:

③有时想复制矩阵本身(完整数据即底层矩阵),现在修改F或G不会影响 A 标头指向的矩阵。

2、颜色系统

①RGB:是最常见的,因为我们的眼睛使用类似的东西,但请记住,OpenCV标准显示系统使用BGR色彩空间(红色和蓝色通道交换位置)组成颜色。

②HSV和HLS:将颜色分解为色调、饱和度和值/亮度分量,这是我们描述颜色的一种更自然的方式。例如,您可能会忽略最后一个组件,从而使您的算法对输入图像的光照条件不太敏感。

③YCrCB:被流行的JPEG图像格式使用

④CIE:L*a*b是一个感知均匀的颜色空间,如果您需要测量给定颜色到另一种颜色的距离,它会派上用场。

       图像矩阵的大小取决于使用的颜色系统。更准确的说,它取决于通道数。每个都有自己的有效域。这会导致使用的数据类型不同。我们如何存储组件定义了我们对其域的控制。可能的最小数据类型是 char,这意味着一个字节或 8 位。这可能是无符号的(因此可以存储从 0 到 255 的值)或有符号的(从 -127 到 +127 的值)。尽管在三个分量(如 RGB)的情况下,这个宽度已经提供了 16 万种可能的颜色来表示,但我们可以通过为每个分量使用浮点数(4 字节 = 32 位)或双精度(8 字节 = 64 位)数据类型来获得更精细的控制。不过,请记住,增加组件的大小也会增加内存中整个图片的大小

可以指定图像的数据类型

 

组成都是CV_+深度+通道,其中里面的数字8 ,16,32 标识的是深度,例如:

  • CV_8U是无符号8位/像素,即一个像素可以有0-255的值,这是大多数图像和视频格式的正常范围。
  • CV_32F是float-像素可以有0-1.0之间的任何值,这对于某些数据集的计算很有用,但必须将其转换为8位才能通过将每个像素乘以255来保存或显示。
  • CV_32S是每个像素的一个有符号32位整数值-同样有用的是,您正在对像素进行整数运算,但同样需要转换为8位才能保存或显示。因为您需要决定如何转换更大范围的可能值(+/-20亿!)变成0-255

3、创建一个Mat类型的对象

①cv::Mat::Mat Constructor(Mat构造函数)

 Scalar:指定它,您就可以使用自定义值初始化所有矩阵点。如果需要更多,可以使用上部宏创建类型,在括号中设置通道编号,如下所示。

②使用 C/C++ 数组并通过构造函数初始化

③cv::Mat::create function这种方法不能用来构造初始化矩阵值,只有当新尺寸不适合旧尺寸时,它才会重新分配其矩阵数据存储器。

④MATLAB 样式初始值设定项,cv::Mat::zeros(零矩阵) , cv::Mat::ones(1矩阵) , cv::Mat::eye(对角矩阵)

⑤对小矩阵,可直接使用逗号分隔数据

⑥为现有 Mat 对象创建一个新的标头,然后cv::Mat::clone or cv::Mat::copyTo它

⑦可以使用cv::randu()函数用随机值填充矩阵,需要为随机值指定上下限:

4、格式化矩阵输出

5、其它输出形式

①2D:

②3D:

③vector<Vec4i>hierarchy:数组容器,里面放的是4个int的整数。

vector h ,一次只放一个整数,赋值一个int

vector h1, 一次放四个整数。给它赋一个 vec4i就可以

源链接: OpenCV: Mat - The Basic Image Container

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值