OpenCV参考手册之Mat类详解(二)

2023-05-16

 译文参考The OpenCV Reference Manual (Release 2.3)August 17 2011

Mat::~Mat

Mat的析构函数。

C++: Mat::~Mat()

析构函数调用Mat::release()。

Mat::operator =

提供矩阵赋值操作。

C++: Mat& Mat::operator=(const Mat& m)

C++: Mat& Mat::operator=(const MatExpr_Base& expr)

C++: Mat& Mat::operator=(const Scalar& s)

参数:

m – 被赋值的右侧的矩阵。 矩阵的赋值是一个复杂度为O(1) 的操作。 这就意味着没有数据段复制并且有数量的递增两矩阵将使用同一引用计数器。在给矩阵赋新数据之前先由Mat::release()释放引用。

expr –被赋值的矩阵表达式对象。 作为第一种赋值方式的逆操作第二种形式可以被重新用到具有适当大小和尺寸的已分配空间的矩阵上以适应表达式的结果。矩阵表达式扩展得到的实函数将自动处理这个分配过程。例如:

C=A+B 扩展成add(A, B, C) , andadd() 要当心C重新分配数据的操作。.

s – 标量赋值给每一个矩阵元,矩阵的大小和类型将不会改变。有现成的赋值运算符。由于他们各不相同请阅读运算符参数说明。

Mat::operator MatExpr

提供一种Mat-to-MatExpr转换运算符

C++: Mat::operator MatExpr_<Mat, Mat>() const

转换运算符不能显示调用而是由矩阵表达式引擎(Matrix Expression engine)内部调用The cast operator should not be called explicitly. It is used internally by the Matrix Expressions engine.

Mat::row

创建一个指定行数的矩阵头。.

C++: Mat Mat::row(int i) const

参数:

i – 一个0基的行索引.

该方法创建一个具有指定了行数的新矩阵头的矩阵并返回它。这是一个复杂度为O(1) 的操作,无须考虑矩阵的尺寸。新矩阵和原矩阵共享一份基础数据。这是一个典型基本矩阵处理操作的例子, axpy是LU和许多其它算法都使用的一个函数

inline void matrix_axpy(Mat& A, int i, int j, double alpha)

{

A.row(i) += A.row(j)*alpha;

}

Note:在当前实现中,下面的代码不会无法按预期的效果工作:

Mat A ;

...

A.row(i) = A.row(j) ;/ /不起作用

发生这种情况是因为 A.row(i) 形成临时矩阵头进一步分配给另一个矩阵头。请记住,每个操作复杂度为O(1),即没有复制任何数据。因此,如果你预期第 j行被复制到第 i行,那么上述赋值不成立。要做到这一点,应该把这种简单的赋值转换到表达式中或使用 Mat::copyTo() 方法:

Mat A ;

...

/ / 可行,但看上去有点目的不明确。

A.row(i) = A.row(j) + 0;

/ / 这是有点儿长,但这是推荐的方法。

A.row(j).copyTo(A.row(i)) ;

Mat::col

创建一个具有指定了矩阵头中列数这个参数的矩阵

C++: Mat Mat::col(int j) const

参数:

j –一个0基(从0开始)的列索引

该方法创建一个具有指定了矩阵头中列数这个参数的新矩阵并作为函数返回值。这是一种复杂度为O(1)的操作,不用考虑矩阵的尺寸大小。新矩阵和原始矩阵共享一份基础数据。参看Mat::row()说明信息。

Mat::rowRange

为指定的行span创建一个新的矩阵头。

C++: Mat Mat::rowRange(int startrow, int endrow) const

C++: Mat Mat::rowRange(const Range& r) const

参数:

startrow – 一个包容性的0基(从0开始)的行span起始索引.。

endrow – 一个0基的独占性的行span.终止索引。

r – Range 结构包含着起始和终止的索引值。该方法给矩阵指定的行span创建了新的头。 与Mat::row() 和 Mat::col()相类似这是一个复杂度为O(1)的操作。

Mat::colRange

为指定的行span创建一个矩阵头。

C++: Mat Mat::colRange(int startcol, int endcol) const

C++: Mat Mat::colRange(const Range& r) const

参数:

startcol – 一个包容性的0基(从0开始)的span列起始索引。

endcol –一个0基的独占性的列span.终止索引。

r –Range 结构包含着起始和终止的索引值。该方法给矩阵指定的列span创建了新的头。 与Mat::row() 和 Mat::col()相类似这是一个复杂度为O(1)的操作。

Mat::diag

提取或创建矩阵对角线。

C++: Mat Mat::diag(int d) const

C++: static Mat Mat::diag(const Mat& matD)

参数:

d – 对角线的索引值,可以是以下的值:

– d=0 是主对角线

– d>0表示下半部的对角线。例如:d=1对角线是紧挨着住对角线并位于矩阵下方。

– d<0表示来自矩阵上半部的对角线。例如:d= 1表示对角线被设置在对角线的上方并紧挨着。

matD – 单列用于形成矩阵对角线的列。

该方法为指定的矩阵创建一个新的头。然后新矩阵被分割为单独的列矩阵。类似于Mat::row() 和Mat::col() ,它是复杂度为O(1)操作。

Mat::clone

创建一个数组及其基础数据的完整副本。

C++: Mat Mat::clone() const

该方法创建了一个完整的数组副本。原始的step[]不会被考虑在内的。因此数组的副本是一占用total()*elemSize()字节的连续阵列。

Mat::copyTo

把矩阵复制到另一个矩阵中。

C++: void Mat::copyTo(OutputArray m) const

C++: void Mat::copyTo(OutputArray m, InputArray mask) const

参数:

m – 目标矩阵。如果它的尺寸和类型不正确,在操作之前会重新分配。

mask – 操作掩码。它的非零元素表示矩阵中某个要被复制。

该方法把矩阵的复制到另一个新的矩阵中在复制之前该方法会调用

m.create(this->size(), this->type);

因此,目标矩阵会在必要的情况下重新分配

尽管m.copyTo(m) works flawlessly,该函数并不处理源矩阵和目标矩阵之间有重叠的部分的情况。当操作掩码指定以及上述的Mat::create重新分配矩阵,新分配的矩阵在数据复制到里面之前全都被初始化为0。

Mat::convertTo

在缩放或不缩放的情况下转换为另一种数据类型。

C++:

void Mat::convertTo(OutputArray m,int rtype,double alpha=1,double beta=0)const

参数:

m – 目标矩阵。如果它的尺寸和类型不正确,在操作之前会重新分配。

rtype – 要求是目标矩阵的类型,或者在当前通道数与源矩阵通道数相同的情况下的depth。如果rtype 为负,目标矩阵与源矩阵类型相同。

beta – 可选的delta加到缩放值中去。

该方法将源像素值转化为目标类型saturate_cast<> 要放在最后以避免溢出

m( x;y) = saturate_cast < rType > ( α*( *this)( x;y) +β)

Mat::assignTo

提供了一个convertTo的功能形式。

C++: void Mat::assignTo(Mat& m, int type=-1 ) const

Parameters

m – 目标阵列。

type – 要求是目标阵列depth或-1(如果阵列的类型和源矩阵类型相同)

这是一个 internally 使用的由 Matrix Expressions引擎调用的方法。

Mat::setTo

将阵列中所有的或部分的元素设置为指定的值。

C++: Mat& Mat::setTo(const Scalar& s, InputArray mask=noArray())

参数:

s – 把标量赋给阵列并转化到阵列的实际类型。

mask – 与 *this尺寸相同的操作掩码。这是Mat::operator=(const Scalar& s)运算符的一个高级变量。

Mat::reshape

在无需复制数据的前提下改变2D矩阵的形状和通道数或其中之一。

C++: Mat Mat::reshape(int cn, int rows=0) const

参数:

cn – 新的通道数。若cn=0,那么通道数就保持不变。

rows –新的行数。 若rows = 0, 那么行数保持不变。

该方法为*this元素创建新的矩阵头。这新的矩阵头尺寸和通道数或其中之一发生改变,在以下的情况任意组合都是有可能的:

ü  新的矩阵没有新增或减少元素。通常,rows*cols*channels()在转换过程中保持一致。.

ü  无数据的复制。也就是说,这是一个复杂度为 O(1)的操作。通常,如果该操作改变行数或透过其他方式改变元素行索引,那么矩阵必定是连续的。参见Mat::isContinuous()。

例如,有一存储了STL向量的三维点集,你想用3xN的矩阵来完成下面的操作:

std::vector<Point3f> vec;

...

Mat pointMat = Mat(vec). //把向量转化成Mat, 复杂度为O(1)的运算

reshape(1). // 从Nx1的3通道矩阵得出Nx3 的单通道矩阵

//同样是复杂度为O(1)的运算

t(); // 最后转置Nx3 的矩阵

//这个过程要复制所有的元素

Mat::t

转置矩阵。.

C++: MatExpr Mat::t() const

该方法通过矩阵表达式(matrix expression)实现矩阵的转置The method performs matrix transposition by means of matrix expressions. 它并未真正完成了转置但却返回一个临时的可以进一步用在更复杂的矩阵表达式中或赋给一个矩阵的转置矩阵对象:

Mat A1 = A + Mat::eye(A.size(), A.type)*lambda;

Mat C = A1.t()*A1; //计算(A + lambda*I)^t * (A + lamda*I).

Mat::inv

反转矩阵

C++: MatExpr Mat::inv(int method=DECOMP_LU) const

参数:

method – 反转矩阵的方法。有以下几种可能的值:

– DECOMP_LU是 LU 分解一定不能是单数的。

– DECOMP_CHOLESKY 是 Cholesky LLT只适用于对称正矩阵的分解。该类型在处理大的矩阵时的速度是LU的两倍左右。

– DECOMP_SVD是 SVD 分解。如果矩阵是单数或甚至不是2维,函数就会计算伪反转矩阵。

该方法执行矩阵的反转矩阵表达。这意味着该方法返回一个临时矩阵反转对象并可进一步用于更复杂的矩阵表达式的中或分配给一个矩阵。

Mat::mul

执行两个矩阵按元素相乘或这两个矩阵的除法。

C++: MatExpr Mat::mul(InputArray m, double scale=1) const

参数:

m – 与*this具有相同类型和大小的矩阵,或矩阵表达式。

scale – 可选缩放系数。

该方法返回一个用可选的缩放比率编码了每个元素的数组乘法的临时的对象。 注意:这不是一个对应“*”运算符的简单的矩阵乘法。.

例::

Mat C = A.mul(5/B); // 等价于divide(A, B, C, 5)

Mat::cross

计算3元素向量的一个叉乘积。

C++: Mat Mat::cross(InputArray m) const

参数:

m –另一个叉乘操作对象。

该方法计算了两个3元素向量的叉乘的积被操作向量必须是3元素浮点型的具有相同形状和尺寸的向量。结果也是一语被操作对象的具有相同形状和大小的浮点型3元素向量。

Mat::dot

计算两向量的点乘。

C++: double Mat::dot(InputArray m) const

参数:

m –另一个点积操作对象。

方法计算两个矩阵的点积。如果矩阵不单列或单行的向量,用顶部到底部从左到右扫描次序将它们视为 1 D向量。这些向量必须具有相同的大小和类型。如果矩阵有多个通道,从所有通道得到的点积会被加在一起。

Mat::zeros

返回指定的大小和类型的零数组。

C++: static MatExpr Mat::zeros(int rows, int cols, int type)

C++: static MatExpr Mat::zeros(Size size, int type)

C++: static MatExpr Mat::zeros(int ndims, const int* sizes, int type)

参数

ndims – 数组的维数。

rows–行数。

cols  –列数。

size–替代矩阵大小规格Size(cols, rows)的方法。

sizes– 指定数组的形状的整数数组。

type– 创建的矩阵的类型。

该方法返回一个 Matlab 式的零数组初始值设定项。它可以用于快速形成一个常数数组作为函数参数,作为矩阵的表达式或矩阵初始值设定项的一部分。

Mat A;

A = Mat::zeros (3,3,CV_32F);

在上面的示例中,只要A不是 3 x 3浮点矩阵它就会被分配新的矩阵。否则为现有的

矩阵 A填充零。

Mat::ones

返回一个指定的大小和类型的全为1的数组。

C++: static MatExpr Mat::ones(int rows, int cols, int type)

C++: static MatExpr Mat::ones(Size size, int type)

C++: static MatExpr Mat::ones(int ndims, const int* sizes, int type)

参数:

ndims –数组的维数。

rows –行数。.

cols –列数。

size –替代矩阵大小规格Size(cols, rows)的方法。

sizes –指定数组的形状的整数数组。

type –创建的矩阵的类型。

该方法返回一个 Matlab 样式 1 的数组初始值设定项,类似Mat::zeros()。请注意,这种方法中你可以使用任意一个值和Matlab 语法初始化数组如下:

Mat A = Mat::ones (100,100,CV_8U) * 3 ;/ / 使100 x 100 矩阵里充满 3。

上述操作不会形成一个 100 x 100 1 的矩阵,然后乘以 3。相反,它只是记住

缩放因子(在本例中 3)在实际调用矩阵初始值设定项时使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV参考手册之Mat类详解(二) 的相关文章

  • C#怎样实现远程连接SQL Server2005

    本文详细讲述了C 怎样实现远程连接SQL Server2005各个步骤 首先配置SQLSERVER2005 xff1a 打开 Microsoft SQL Server Management Studio 直接用Windows 用户连接进入
  • 九、Python第九课——Python中的if语句与运用

    xff08 请先看置顶博文 xff09 https blog csdn net GenuineMonster article details 104495419 目录 一 if语句 1 检查变量存储的值是否相等 2 判定字母或字符串时区别大
  • windows环境下wampserver的配置教程

    对 于初做 PHP 网站的朋友来说 xff0c 第一步肯定是希望在自己电脑是搭建 PHP 环境 xff0c 省去空间和上传的麻烦 xff01 但搭建环境也不是件容易的事情 xff0c 特别是对于新手同学来 说 xff01 因此在这里跟大家介
  • CentOS7.X 新装后个性化处理

    目录 1 修改HostName2 Shell脚本中文乱码问题解决3 部分常用开发工具安装4 常用开发工具安装PS 1 修改HostName 设置自定义HostName hostnamectl set hostname MyHostName
  • ffmpeg命令行提示“no such file or directory...”

    最近参考一博客测试使用ffmpeg将rtsp流分片成ts文件 xff0c 附上大神博客链接 xff0c 很有用 xff01 xff01 xff01 https blog csdn net kunzai6 article details 76
  • Python pygame安装过程笔记

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • PyQtgraph结合Pyside6绘图解决pyqtgraph模块无GraphicsWindow的问题

    解决前辈的示例的问题 发生异常 AttributeError module pyqtgraph has no attribute GraphicsWindow 代码如下 xff1a 将 xff1a win 61 pg GraphicsWin
  • Proteus&keil-51单片机-外部中断控制流水灯

    实现功能 利用P0端口进行花样显示 xff0c 显示顺序为 xff1a 8个LED灯依次左移点亮 xff1b 8个LED灯依次右移点亮 xff1b xff0c LED0 LED2 LED4 LED6亮1秒熄灭 xff0c LED1 LED3
  • 51单片机-60秒计时

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • 关于计算几何某些定理·基础知识的汇总

    欧拉定理 xff1a 设平面图的顶点数 xff0c 边数和面数分别为V xff0c E和F xff0c 则V 43 F E 61 2 直线方程两点式转换为一般式 xff1a 1 两点式 xff1a y y2 y1 y2 61 x x2 x1
  • C51单片机和ADC0832芯片设计数字电压表

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • opencv for python绘制箭靶并标注环数

    先从外到内循环绘制圆 再添加数字 有待改进 最后绘制十字线 span class token comment 绘制箭靶并标注环数 span span class token keyword import span cv2 span clas
  • opencv for python 绘制圆角矩形

    span class token comment 绘制100 240像素 圆角20的矩形 span span class token keyword import span cv2 span class token keyword as s
  • opencv鼠标指针左键画图,右键清除.

    span class token comment 按住鼠标左键画图 双击鼠标左键可以清除 span span class token keyword import span cv2 span class token keyword as s
  • macOS命令释放可释放空间(不用CleanMyMac)

    背景 众所周知 xff0c CleanMyMac的 释放可清除空间 功能非常厉害 xff0c 在用户明明已经删除了大量文件腾出几十G空间的情况下 xff0c macOS的存储管理里面仍然会显示可用空间不足 xff0c 甚至升级大型软件会提示
  • 使用 PyInstaller 把python程序 .py转为 .exe 可执行程序

    最近使用Python为项目开发一款绘图工具 绘出 声场三维模型 因为希望能把Python脚本发布为脱离Python平台运行的可执行程序 xff0c 比如单个 的exe文件 PyInstaller恰满足这个需求 本文PyInstaller的版
  • 字符串最小周期串问题

    问题描述 xff1a 如果一个字符串可以由某个长度为n的字符串重复多次得到 xff0c 则该串以n为周期 例如 xff0c abcabcabcabc以3为周期 xff08 注意 xff0c 它也以6和12为周期 xff09 输入一个长度不超
  • linux 下使用 rsync 进行文件 同步

    rsync 介绍 rsync是类unix系统下的数据镜像备份工具 remote sync rsync是一个功能非常强大的工具 xff0c 其命令也有很多功能特色选项 xff0c 我们下面就对它的选项一一进行分析说明 它的特性如下 xff1a
  • linux 下安装、使用 redis

    redis介绍 Redis是一个开源 支持网络 基于内存 键值对存储数据库 xff0c 使用ANSI C编写 xff0c redis中文官方网站 xff0c 点这里 redis安装 我的linux操作系统为ubuntu12 04 登录 ht
  • 奇异递归模板模式(CRTP)应用--表达式模板(expression template) 2

    1 表达式模板 xff08 expression template xff09 概述 首先分几个部分介绍下expression template 1 1 表达式模板 xff08 expression template xff09 是什么 x

随机推荐

  • Codeforces Round #210 (Div. 2)

    本不想写 xff0c 毕竟就打了一个小时 xff08 训练题变成个人赛了T T xff09 xff0c 但是第一次水题4分钟搞定 xff0c 手速一点没涨 xff0c 纯粹就是脑子快 A Levko and Table 题意 xff1a 输
  • C++自动微分(Automatic differentiation)原理1

    0 缘由 下面介绍下为什么要引入自动 自动微分 automatic differentiation gt AD 一个优化问题的例子 假设现在我们在解决一个机器学习的问题 xff0c 有了一些训练样本 xff0c 现在需要寻找一个最优的函数
  • cython的使用

    0 环境配置 要使用cython首先得有的她的环境 废话 xff0c xff0c 系统上有pip包管理环境的话直接 xff1a pip install cython 即可安装cython或者也可以源码安装 https github com
  • linux 有效用户和实际用户的区别

    今天在看APUE xff0c 这两个问题很难理解 xff0c GOOGLE一下 xff0c 有篇文章总结的不错 xff0c 看了一下才明白透彻了 由于用户在UNIX下经常会遇到SUID SGID的概念 xff0c 而且SUID和SGID涉及
  • 使用 python Matplotlib 库绘图

    Matplotlib的安装 matplotlib 是python最著名的绘图库 xff0c 它提供了一整套和matlab相似的命令API xff0c 十分适合交互式地 进行制图 Matplotlib的安装可以参见 官网链接 http mat
  • 优酷路由器刷openwrt固件一

    1 下载openwrt源码 https git openwrt org p 61 openwrt openwrt git a 61 shortlog h 61 refs tags v18 06 2 2 解压 tar xvf openwrt
  • STM32F4--PWM控制LED忽明忽暗(呼吸灯)

    一 实验原理 分析 xff1a 时钟84Mhz 分频84 xff0c ARR设置500 xff0c 计数器得到的时钟84M 84 61 1 Mhz 计数一次时间为0 5ms 在主函数中 xff0c 我设置的修改时间是2ms一次 xff0c
  • CTreeCtrl的用法

    1 取得或设定项目的信息 BOOL CTreeCtrl GetItem TV ITEM pItem BOOL CTreeCtrl SetItem TV ITEM pItem BOOL CTreeCtrl SetItem HTREEITEM
  • Windows下C++连接MySQL

    步骤 xff1a 1 安装MySQL数据库 2 项目属性页 gt C C 43 43 gt 常规 gt 附加包含目录 xff1a xxx MySQL Server 5 6 include 3 项目属性页 gt 链接器 gt 常规 gt 附加
  • Samba共享Nextcloud目录

    Nextcloud是一款开源免费的私有云存储网盘 xff0c 它提供了网页版和各平台的客户端 xff0c 支持WebDAV协议 虽然WebDAV协议很方便在公网环境使用 xff0c 但我们在家时 xff0c 使用Samba协议去访问操作Ne
  • VS-RK3XXX ARM版本的ubuntu系统镜像文件官方下载

    RK3399的wiki中给出的编译内核和制作文件系统的方法完全正确 xff0c 只是写的不太详细 xff0c 应该把RK3288和RK3399的wiki结合起来看就没有问题了 这里我只是总结一下 xff0c 把需要注意到的地方再重复一遍而已
  • 计算几何凸包的算法 Andrew和Melkman算法

    先介绍下二者的时间复杂度 xff1a Andrew算法是葛立恒扫描法的变种 xff0c 但是更快 xff0c 时间O nlogn Melkman算法是采用双端队列 xff0c 时间O n 第一种是经典算法 xff0c 第二种则是在解决时间要
  • 遗传算法求解函数极值—MATLAB编程实现的详细解释

    主函数 main m clear all span class token punctuation span clc span class token punctuation span popsize span class token op
  • P2651 增加括号III(简单数学)

    include lt iostream gt include lt cstdio gt include lt string gt include lt algorithm gt include lt vector gt include lt
  • P1233 木棍加工(最长上升子序列)

    P1233 木棍加工 https www luogu com cn problem P1233 include lt iostream gt include lt cstdio gt include lt string gt include
  • Ubuntu 22.04重启后网络连接失败

    Ubuntu 22 04重启后 xff0c 远程登录时 xff0c 发现连接失败 xff0c 就使用ifconfig查看ip xff0c 结果发现没有网卡 xff0c 只有个lo 以为是网络设置没打开 xff0c 进入setting gt
  • BT4设置

    首先一定要让 BT4 联网 我们先来配置下网络 1 虚拟机的网卡编辑里面选择的是 NAT 2 自己的 windows 系统 本地连接 属性 高级 internet 连接共享 里面选择共享网络 然后进虚拟机 打开 BT4 的终端 输入 wic
  • 计算机网络协议(五)——DNS、HTTPDNS

    底层网络知识详解 xff1a DNS HTTPDNS 概述一 DNS协议 xff1a 网络世界的地址簿1 1 DNS解析流程1 2 负载均衡 二 HTTPDNS 概述 这个专栏的计算机网络协议 xff0c 我是在极客时间上学习 已经有三万多
  • EIGRP理论详解及基础实验

    EIGRP Enhanced Interior Gateway Routing Protocol 增强型内部网关路由协议 EIGRP 是一种Cisco专用协议 同时具备链路状态和距离矢量路由协议的优点 只发送变化后的信息 这类似于链路状态协
  • OpenCV参考手册之Mat类详解(二)

    译文参考The OpenCV Reference Manual xff08 Release 2 3 xff09 August 17 2011 Mat Mat Mat的析构函数 C 43 43 Mat Mat 析构函数调用Mat releas