OpenCV学习笔记——新版本的数据结构core

2023-05-16

2.0新版本对数据结构进行了大幅修改:

定义了DataType

定义了Point_模板类,取代了之前版本的CvPoint、CvPoint2D32f

Point_类不用多言,里面两个成员变量x,y。Point_<int>就是Point2i,也是Point,Point_<float>就是Point2f,Point_<double>就是Point2d

Point3_类不太常用,跟Point_类差不太多,成员变量x,y,z

定义了Point3_模板类,取代了之前版本的CvPoint2D32f

定义了Size_模板类,取代了之前版本的CvSize和CvSize2D32f

Size_类成员变量width、height。Size_<int>就是Size2i,也是Size,Size_<float>就是Size2f大家就要不臆断出来个Size2d啥的让编译器发懵了

定义了Rect_模板类,取代了之前版本的CvRect

Rect_类有些意思,成员变量x、y、width、height,分别为左上角点的坐标和矩形的宽和高。常用的成员函数有Size()返回值为一个Size,area()返回矩形的面积,contains(Point)用来判断点是否在矩形内,inside(Rect)函数判断矩形是否在该矩形内,tl()返回左上角点坐标,br()返回右下角点坐标。值得注意的是,如果想求两个矩形的交集,并集,可以用如下格式

Rect rect = rect1 & rect2;  
Rect rect = rect1 | rect2;  
如果想 让矩形平移操作,缩放操作 ,甚至可以这样写

Rect rectShift = rect + point;  
Rect rectScale = rect + size;  

RotatedRect模板类,

TermCriteria模板类,取代了之前的CvTermCriteria,这个类是作为迭代算法的终止条件的,这个类在参考手册里介绍的很简单,我查了些资料,这里介绍一下。该类变量需要3个参数,一个是类型,第二个参数为迭代的最大次数,最后一个是特定的阈值。类型有CV_TERMCRIT_ITER、CV_TERMCRIT_EPS、CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,分别代表着迭代终止条件为达到最大迭代次数终止,迭代到阈值终止,或者两者都作为迭代终止条件。以上的宏对应的c++的版本分别为TermCriteria::COUNT、TermCriteria::EPS,这里的COUNT也可以写成MAX_ITER

Matx模板类。Matx模板类是对Mat类的一个拓展,Matx其实是个轻量级的Mat,必须在使用前规定好大小,比如一个2*3的float型的可以声明为Matx23f。从Matx类有派生出Vec类,Vec是Matx的一个派生类,就是一个1维的Matx,跟vector很相似。比如想声明一个10个数据的float数组,可以写成Vec2f。又Vec类又派生出Scalar_类,取代了CvScalar,这个类其实就是一个Vec4x的一个变种,大家常用的Scalar其实就是Scalar_<double>。这样一说,大家是不是就很容易理解了,为啥很多函数的参数输入可以是Mat,也可以是Scalar了。其实OpenCV定义的InputMat,outputMat参数格式,以上的这几种数据结构都可以作为参数的

定义了Range类指定了一个序列的一个连续的子序列,大家可能用的不多,对它不熟悉,其实它就是为了使OpenCV的使用更像Matlab而产生的。比如Range::all()其实就是Matlab里的符号:或者...。而Range(a, b)其实就是Matlab中的a:b。有趣吧,注意a,b都需要是int型的哦,亲。

定义了Ptr类用来对老版本的数据结构进行指针操作,更安全有效,可以防止内存的不正常使用。

最最重要的定义了Mat类来表示矩阵,取代了之前的CvMat和lplImage。介绍该类几个比较重要的成员变量flag(就是我之前说过的header里的结构信息,深度信息,通道数),dims是Mat的维数,要求大于等于2,rows和cols参数代表2维矩阵的行数列数(对于更高维的矩阵,这两个参数都是-1),还有个比较常用的参数应该uchar* data,是Mat的数据指针(比较暴力的同学可以直接调用它好了,不推荐),还有个参数refconst,我理解应该就是我上一讲提到的释放内存的时候要判断这个矩阵是否是最后一个被使用的,这个参数应该就是控制跟当前矩阵结构相关的个数的。Mat结构支持的操作有:

构造析构函数Mat和~Mat

对=、MatExpr、( )、CvMat、IplImage进行了运算符重载

row、col函数

rowRange、colRange

类似matlab的运算操作diag、t、inv、mul、cross、dot、zeros、one、eye

复制转换变形clone、copyTo、convertTo、assignTo、setTo、reshape、create、addref

其中copyTo函数有个妙用,不但可以复制Mat,还可以通过mask提取出感兴趣的部分

数据的操作release、resize、reserve、push_back、pop_back、locateROI、adjustROI

Mat的信息total、isContinuous、elemSize、elemSize1、type、depth、channes、step1、size、empty

其中step1函数返回Mat结构每一行的字节数=列数*通道数,更方便用指针定位特定元素

定位ptr、at、begin、end

还做了几个扩展类 Mat_、NAryMatlterator、SparseMat、SparseMat_ 取代了之前的CvSparseMat。这些类的操作运算与Mat大同小异,类声明参考core的具体头文件

当然,新版本对老版本的数据结构和函数依然支持。

新版本还在这些结构里支持dft、dct变换,我这里讲一下我的新发现PCA类、SVD类

PCA类有构造函数PCA,运算符重载(),project,backProject。SVD类有构造函数SVD,运算符重载(),compute,solveZ,backSubst

这里介绍几个实用函数:

inRange函数可以检查Matsrc的内容是否在Matlower、Matupper之间,输出结果是一个uchar型矩阵,1表示在两者之间,否则为0,值得注意的是,Matlower,Matupper也可以用Scalar的格式

bitwise_xxx函数对两个矩阵进行位运算,结果保存在第三个矩阵当中

mixChannels函数可以实现矩阵的指定通道复制到新矩阵的指定通道

总之,新版本支持更多的数学运算,还支持一些画图操作


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

OpenCV学习笔记——新版本的数据结构core 的相关文章

随机推荐

  • VMware虚拟机安装Ubuntu22.04并配置网络

    一 Ubuntu22 04下载 地址 xff1a https ubuntu com Ubuntu Desktop 包含图形用户界面 Ubuntu Server 不包含图形用户界面 二 VMware安装Ubuntu22 04 三 配置网络 设
  • error RC2108: expected numerical dialog constant

    在我们用图形控件Picture Control在对话框上添加图片是 xff0c 经常会出现error RC2108 expected numerical dialog constant 解决方法 xff1a 双击error rc2018 打
  • uos服务器系统安装PVE

    文章目录 一 PVE介绍 二 系统和组件版本 三 部署pve 1 修改主机名 2 pve安装 3 浏览器访问 一 PVE介绍 Proxmox VE Proxmox Virtual Environment 有方便易用的WEB界面 基于JAVA
  • 通过设置JDK解决存在多个Gradle后台进程的问题

    使用Android Studio经常会在Event Log窗口遇到如下报错 xff1a 简单解释下就是如果后台有一个常驻的gradle守护进程 xff0c 可以提高我们构建效率 因为这样不但可以避免每次都重新启动JVM xff0c 并且可以
  • intellij idea关闭vim模式

    tools gt vim emulator
  • 最大似然估计和最小二乘估计的区别与联系

    看似最小二乘估计与最大似然估计在推导得到的结果很相似 xff0c 但是其前提条件必须引起大家的注意 xff01 xff01 xff01 对于最小二乘估计 xff0c 最合理的参数估计量应该使得模型能最好地拟合样本数据 xff0c 也就是估计
  • 关于Web API 2.0中的Options请求返回405的问题

    关于Web API 2 0中的Options请求返回405的问题 前提 xff1a IIS寄宿的网站 当你向服务器发送非简单请求时 xff0c 客户端会先发送一条预检请求 xff0c 借以确认当前请求源和待请求方法是否被网站允许 xff08
  • 得到指针指向的数组的长度

    1 定义数组 xff0c 要给定其长度 xff0c 也可以用Type a 61 的方式 在对数组进行操作时 xff0c 可能需要计算数组长度 xff0c 方法是 xff1a sizeof 数组名 sizeof 元素类型 数组int a 4
  • Redis的应用--分布式锁

    Redis 文章目录 Redis应用分布式锁解决方案 应用 分布式锁 互斥死锁容错 解决方案 正常使用redis的nx数据 xff0c 下面的语句 xff0c key使用对应的前缀 43 主键 xff0c value使用一个随机值UUID
  • Golang调用FFmpeg转换视频流

    问题背景 问题背景是在 xff0c 由于视频采集端使用的是H264编码采集的裸流 xff0c 而网络流媒体大多是以FLV为主的直播方式进行的 xff0c 为了实现实时直播 xff0c 当前是打算直接使用FFmpeg将H264裸流实时转成FL
  • 【Deepin Debian 系统安装RPD远程桌面工具Remmina】

    Remmina 是一款在 Linux 和其他类 Unix 系统下的自由开源 功能丰富 强大的远程桌面客户端 xff0c 它用 GTK 43 3 编写而成 它适用于那些需要远程访问及使用许多计算机的系统管理员和在外出行人员 它以简单 统一 同
  • Linux部署yapi

    一 安装node 1 获取资源node资源 8 x版本 curl sL https rpm nodesource com setup 8 x bash 耐心等待 2 安装nodejs yum install y nodejs 3 查看nod
  • vim环境设定:~/.vimrc(语法高亮等一些的设置)

    Centos里的VI只默认安装了vim minimal xff0d 7 x 所以无论是输入vi或者vim查看文件 xff0c syntax功能都无法正常启用 因此需要用yum安装另外两个组件 xff1a vim common 7 x和vim
  • HTML中meta标签都有什么作用?

    一直以来 xff0c 对HTML中的meta标签一知半解 xff0c 这次抽时间好好总结一下 meta标签 定义 xff1a meta元素提供有关页面的元信息 meta information 比如针对 搜索引擎和更新频度的描述和关键词 搜
  • 自增运算符的用法

    a 43 43 和 43 43 a 都属于自增运算符 a 43 43 是先进行取值 xff0c 后进行自增 43 43 a是先进行自增 xff0c 后进行取值
  • 使用七牛云CDN加速并绑定阿里云域名详细教程

    昨天晚上在某个群里看到群友问 xff0c 七牛云能不能绑定自己的域名作为静态资源文件的前缀 xff0c 忽然想起来我已经有快两年时间没有登录过我的七牛云账号了 xff0c 不禁老脸一红 xff0c 这是有多久没有自己前后端都弄了 xff0c
  • 一些中间件的思维导图

    一些中间件的思维导图 文章目录 一些中间件的思维导图写在前面Redis博客连接Redis的应用 分布式锁Redis的基础Redis的生产问题 缓存雪崩 缓存穿透 双写一致性 并发竞争Redis的cluster集群Redis的replicat
  • VS2012 下配置gsl-1.8库

    GSL的安装配置如下 xff1a 1 下载安装 从http gnuwin32 sourceforge net packages gsl htm 下载安装gsl 1 8 exe和gsl 1 8 src exe两个exe文件 下载好后如下图 x
  • 一种初始化结构体数组的方法

    typedef struct int requestNumber void dispatchFunction Parcel amp p struct RequestInfo pRI int responseFunction Parcel a
  • OpenCV学习笔记——新版本的数据结构core

    2 0新版本对数据结构进行了大幅修改 xff1a 定义了DataType 类 定义了Point 模板类 xff0c 取代了之前版本的CvPoint CvPoint2D32f Point 类不用多言 xff0c 里面两个成员变量x xff0c