学习Opencv(蝴蝶书/C++)——3. OpenCV的数据类型

news2025/1/13 2:35:44

文章目录

  • 1. 总览
  • 2. 基础类型
    • 2.0 基础类型总览
    • 2.1 cv::Vec<>类
    • 2.2 cv::Matx<>类
    • 2.3 cv::Point类(cv::Point3_< >和cv::Point_< >)
    • 2.4 cv::Scalar(cv::Scalar_)类
    • 2.5 cv::Size(cv::Size_)类、cv::Rect(cv::Rect_)类和cv::RotatedRect 类
    • 2.6 基础类型支持的操作
      • 2.6.1 cv::Point
      • 2.6.2 cv::Scalar
      • 2.6.3 cv::Size类
      • 2.6.4 cv::Rect类
      • 2.6.5 cv::RotateRect类
      • 2.6.6 cv::Matx类
      • 2.6.7 cv::Vec类
      • 2.6.8 cv::Complex_
  • 3. 辅助对象
    • 3.1 cv::TermCriteria
    • 3.2 cv::Range
    • 3.3 cv::Ptr模版和垃圾回收
    • 3.4 cv::Exception类和异常处理
    • 3.5 cv::DataType<> 模板(traits)
    • 3.6 cv::InputArray和cv::OutputArray以及cv::_InputOutputArray类
      • 3.6.1 cv::InputArray(cv::InputArrayOfArrays)
      • 3.6.2 cv::OutputArray(cv::OutputArrayOfArrays)
  • 4. 工具函数(系统函数)
  • 5. 总结
  • X. 其他
    • X.1 OpenCV_cheatsheet中的关键数据类型
    • X.2 C++开发桌面程序和js开发
    • X.3 开源库的组织(如何更好的看文档)

1. 总览

关于OpenCV的数据结构,官方文档位于:Core functionality

主要就是下面这几项内容:
在这里插入图片描述

注意,下文中提到的C语言中的结构:例如:CvPoint和CvPoint2D32f
位于C structures and operations,4.x之后的文档就没有这些内容了
虽然文档没有了,但是源文件里依然有opencv-4.8.0/modules/core/include/opencv2/core/types_c.h相应的头文件

根据Learning OpenCV3,可知:
在这里插入图片描述

2. 基础类型

2.0 基础类型总览

在这里插入图片描述

参考:

  • https://docs.opencv.org/4.x/dc/d84/group__core__basic.html
  • https://docs.opencv.org/4.x/d2/d75/namespacecv.html中 搜索即可,这个网页中黑色无链接的类/结构是:“black box”与磁盘相关的文件存储。

2.1 cv::Vec<>类

cv::Vec<>——固定向量类(所存储的元素长度固定),用于维度固定的小型向量

cv::Vec< _Tp, cn > Class Template Reference

  • 尖括号是模板类的意思,
  • 相对于普通的STL的向量类,固定向量类在编译时就已知向量的维度,这样代码处理起来就会更高效。

虽然cv::Vec<>本身已经是模版形式了,但是实际上并不会直接使用这个形式。而是使用typedef定义的别名来使用一些更为通用/专门的实例。

  • 例如:cv::Vec2i就表示有两个元素的整型向量
  • 任何有着cv::Vec{2,3,4,6}{b,w,s,i,f,d}形式的声明,表示6种数据类型中某个具有2~6个元素数量的向量类型。
    • b: unsigned char
    • w: unsigned shor
    • s: short
    • i: int
    • f: float
    • d:double
  • 注意,cv::Vec最长的元素不止是6个,在cv::Vec< _Tp, cn > Class Template Reference中,可以看到cv::Vec<>的构造函数最长可以有14个元素。同时,还可以接受矩阵的某行作为参数。
  • 在Shorter aliases for the most popular specializations of Vec<T,n>中,有:在这里插入图片描述

另外,需要注意的一点是,在cv::Vec< _Tp, cn > Class Template Reference中,有:
在这里插入图片描述
即 cv::Vec< >模版类继承自cv::Matx< >模板类。

代码中可以看到:
在这里插入图片描述

2.2 cv::Matx<>类

除了cv::Vec<>固定向量类,还有cv::Matx<>固定矩阵类,
与cv::Vec<>类似,cv::Matx<>也是用于特定的一些小型矩阵中。
(cv::Mat类是用于任意维度的矩阵,一般用在大矩阵,比如存储图像等)

在计算机视觉中,有很多2X2,3X3以及少量的4X4矩阵(例如:3*3的卷积核,3*3或者2*2的变换矩阵等),cv::Matx<>用于设计容纳这些对象。

与cv::Vec<>类似,cv::Matx<>通常也是用别名的形式进行使用,其形式为:
cv::Matx{1,2,3,4,5,6}{1,2,3,4,5,6}{f,d},只有浮点数类型和双浮点数类型。

  • f: float
  • d:double

在OpenCV——Basic structures——Typedefs中,可以看到:
在这里插入图片描述

固定矩阵类的维度在编译前已知,因此其运算效率高,消除很多动态内存分配操作。

2.3 cv::Point类(cv::Point3_< >和cv::Point_< >)

typedef Point2i Point;
默认使用cv::Point时其实调用的是cv::Point2i
cv::Point2itypedef cv::Point_<int>

cv::Point_类和cv::Point3_类

  • 与cv::Vec<>固定向量类很像。
  • cv::PointX类是用来存储2~3个原语类型的容器,用来表示2d或者3d的点
  • 不是从cv::Vec<>类继承的,是由自己的模板派生的,但也可以由固定向量类转变得到
  • cv::Point和cv::Vec<>最大的区别是:
    • 成员通过变量名称访问,如point.x,point.y,而不是通过下标访问,如vec[0],vec[1]等

OpenCV中的Point类包括cv::Point3_和cv::Point_

  • cv::Point3_< >:3D点坐标x,y,z的模板,这个结构可以与C语言中的结构CvPoint2D32f互换。
  • cv::Point_< >:2D点坐标x,y的模板,可以与C语言中的结构:CvPoint和CvPoint2D32f

与cv::Vec<>类似,cv::PointX通常也通过别名调用,

  • cv::Point{2,3}{i,d,f,I}
    • i: int
    • f: float
    • d:double
    • I: int64
  • 在OpenCV——Basic structures——Typedefs中,可以看到:
    在这里插入图片描述
    实际上是分别来自两个3d和2d的模板类构成的cv::PointXX。

2.4 cv::Scalar(cv::Scalar_)类

在OpenCV——Basic structures——Typedefs中,有:
在这里插入图片描述

在cv::Scalar_< _Tp > Class Template Reference中,可以看到:
在这里插入图片描述

cv::Scalar_继承自cv::Vec<_Tp,4>,即本质上是一个4维的固定向量。

代码中可以也看到:
在这里插入图片描述

cv::scalar类直接继承自cv::Vec4d(cv::Vec<double,4>)

2.5 cv::Size(cv::Size_)类、cv::Rect(cv::Rect_)类和cv::RotatedRect 类

typedef cv::Point2i cv::Point
typedef cv::Size2i  cv::Size
typedef cv::Rect2i  cv::Rect

cv::Size类和cv::Rect类与cv::Point类类似,但是也并不继承自cv::Point类,而是继承自己的模板类

  • 主要区别在于cv::Size有width和height这两个属性,而不是cv::Point_类的x和y
  • cv::Rect则是包含width、height、x和y这四个属性。

cv::Size_类和cv::Rect_一般也是通过别名使用,比如:

  • 在OpenCV——Basic structures——Typedefs中,可以看到:
    在这里插入图片描述
  • 最常见的就是直接使用整数型的cv::Sizecv::Rect

cv::RotatedRect类表示非轴对称的矩形,即矩形的四条边不与所在坐标轴平行,表示旋转的矩形。其包括:

RotatedRect (const Point2f &center, const Size2f &size, float angle)
1. Point2f类型的中心点
2. Size2f类型的高宽
3. float的角度

2.6 基础类型支持的操作

2.6.1 cv::Point

在这里插入图片描述
Cast to the fixed vector classes,映射成固定向量类,类似强制类型转换。

根据cv::Point3_< >和 cv::Point_< >的Public Member Functions可知:
cv::Point_< >类的对象有inside方法,cv::Point_< >类的对象是没有该方法的

2.6.2 cv::Scalar

在这里插入图片描述

  • Quaternion四元数,
  • conjugation共轭,连接
  • iff 当且仅当,if and only if
  • cv::Scalar可以和旧的C语言的接口类CvScalar自由转换

根据cv::Scalar_< _Tp > Class Template Reference可知,

  • scalar类除了有自己的一些方法,还有继承自cv::Vec以及更上层的cv::Matx的方法。
  • 例如:
    #include <iostream>
    #include <opencv2/opencv.hpp>
    int main(int argc, char 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1240407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Docker】从零开始:6.配置镜像加速器

【Docker】从零开始&#xff1a;5.配置镜像加速器 什么是镜像加速器&#xff1f;为什么要配置docker镜像加速器?常见的Docker镜像加速器有哪些&#xff1f;如何申请Docker镜像加速器如何配置Docker镜像加速器 什么是镜像加速器&#xff1f; 镜像加速器是一个位于Docker Hub之…

Niushop 开源商城 v5.1.7:支持PC、手机、小程序和APP多端电商的源码

Niushop 系统是一款基于 ThinkPHP6 开发的电商系统&#xff0c;提供了丰富的功能和完善的商品机制。该系统支持普通商品和虚拟商品&#xff0c;并且针对虚拟商品还提供了完善的核销机制。同时&#xff0c;它也支持新时代的商业模式&#xff0c;如拼团、分销和多门店砍价等营销活…

ESP32 Arduino实战Web篇-使用 WebSocket 创建 ESP32 Web 服务器

本文将详细介绍如何使用 WebSocket 创建 ESP32 Web 服务器,解释WebSocket原理与搭建步骤,并附超详细的代码解释 假设我们需要创建一个使用 ESP32 通过 WiFi 控制灯泡的项目。实现非常简单:我们将 ESP32 设置为软 AP 或 STA 模式,使其能够提供一个网页,显示灯开关的状态为…

Go语言多线程爬虫万能模板它来了!

对于长期从事爬虫行业的技术员来说&#xff0c;通过技术手段实现抓取海量数据并且做到可视化处理&#xff0c;我在想如果能写一个万能的爬虫模板&#xff0c;后期遇到类似的工作只要套用模板就能解决大部分的问题&#xff0c;如此提高工作效率何乐而不为&#xff1f; 以下是一个…

【Web】preg_match绕过相关例题wp

目录 ①[FBCTF 2019]rceservice ②[ctfshow]web130 ③[ctfshow]web131 ④[NISACTF 2022]middlerce 简单回顾一下基础 参考文章 p牛神文 preg_match绕过总的来讲就三块可利用 数组绕过、PCRE回溯次数限制、换行符 ①[FBCTF 2019]rceservice 先贴出附件给的源码 &l…

【算法】链表-20231123

这里写目录标题 一、19. 删除链表的倒数第 N 个结点二、21. 合并两个有序链表三、24. 两两交换链表中的节点 一、19. 删除链表的倒数第 N 个结点 提示 中等 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 输入&#xff1a;head [1,…

机器学习入门(第三天)——K近邻(物以类聚)

K-nearest neighbor 知识树 怎么区分红豆绿豆&#xff1f; How to distinguish red beans and green beans? 之前我们构造了一个超平面来解决这个问题&#xff0c;既然超平面可以切分&#xff0c;是不是红豆之间和绿豆之间有着某种关联。即&#xff1a;物以类聚。 如果一个…

【Axure高保真原型】树形表格

今天和大家分享树形表格的原型模板&#xff0c;点击树的箭头可以打开或者收起子节点&#xff0c;点击表格内容&#xff0c;可以选中该行内容实现高亮变色效果&#xff0c;树形表格是通过中继器制作的&#xff0c;使用简单&#xff0c;只需要按要求填写中继器表格即可&#xff0…

DedeBIZ 管理系统 DedeV6 v6.2.6 社区版 免费授权版

DedeBIZ 系统&#xff1a;开源、安全、高效的 DedeV6 v6.2.6 社区版 DedeBIZ 系统是基于 PHP 7 版本开发的&#xff0c;具有强大的可扩展性&#xff0c;并且完全开放源代码。它采用现流行的 Go 语言设计开发&#xff0c;不仅拥有简单易用、灵活扩展的特性&#xff0c;还具备更…

51单片机PWM控制LED灯渐明渐暗实验

51单片机PWM控制LED灯渐明渐暗实验 1.概述 这篇文章介绍单片机的PWM通过占空比控制LED灯的渐明渐暗效果&#xff0c;通过该实验掌握PWM的原理以及应用它做一些事情。 2.操作步骤 2.1.硬件电路 1.硬件准备 名称型号数量单片机STC12C20521LED彩灯无2晶振12MHZ1电容30pf2电阻…

SpringCloud - 新版淘汰 Ribbon,在 OpenFeign 中整合 LoadBalancer 负载均衡

目录 一、LoadBalancer 负载均衡 1.1、前言 1.2、LoadBalancer 负载均衡底层实现原理 二、整合 OpenFeign LoadBalancer 2.1、所需依赖 2.2、具体实现 2.3、自定义负载均衡策略 一、LoadBalancer 负载均衡 1.1、前言 在 2020 年以前的 SpringCloud 采用 Ribbon 作为负载…

边缘计算多角色智能计量插座 x 资产显示标签:实现资产追踪与能耗管理的无缝结合

越来越多智慧园区、智慧工厂、智慧医院、智慧商业、智慧仓储物流等企业商家对精细化、多元化智能生态应用场景的提升&#xff0c;顺应国家节能减排、环保的时代潮流&#xff0c;设计一款基于融合以太网/WiFi/蓝牙智能控制的智能多角色插座应运而生&#xff0c;赋予智能插座以遥…

Hadoop学习笔记:运行wordcount对文件字符串进行统计案例

文/朱季谦 我最近使用四台Centos虚拟机搭建了一套分布式hadoop环境&#xff0c;简单模拟了线上上的hadoop真实分布式集群&#xff0c;主要用于业余学习大数据相关体系。 其中&#xff0c;一台服务器作为NameNode&#xff0c;一台作为Secondary NameNode&#xff0c;剩下两台当…

【精选】Ajax技术知识点合集

Ajax技术详解 Ajax简介 Ajax 即“Asynchronous Javascript And XML”&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c;是指一种创建 交互式、快速动态应用的网页开发技术&#xff0c;无需重新加载整个网页的情况下&#xff0c;能够更新页面局 部数据的技术。通过在…

【Python】【Torch】神经网络中各层输出的特征图可视化详解和示例

本文对神经网络各层特征图可视化的过程进行运行示例&#xff0c;方便大家使用&#xff0c;有助于更好的理解深度学习的过程&#xff0c;尤其是每层的结果。 神经网络各层特征图可视化的好处和特点如下&#xff1a; 可视化过程可以了解网络对图像像素的权重分布&#xff0c;可…

2023.11.22 -数据仓库的概念和发展

目录 https://blog.csdn.net/m0_49956154/article/details/134320307?spm1001.2014.3001.5501 1经典传统数仓架构 2离线大数据数仓架构 3数据仓库三层 数据运营层,源数据层&#xff08;ODS&#xff09;&#xff08;Operational Data Store&#xff09; 数据仓库层&#…

Docker Swarm总结(2/3)

目录 8、service 操作 8.1 task 伸缩 8.2 task 容错 8.3 服务删除 8.4 滚动更新 8.5 更新回滚 9、service 全局部署模式 9.1 环境变更 9.2 创建 service 9.3 task 伸缩 10、overlay 网络 10.1 测试环境 1搭建 10.2 overlay 网络概述 10.3 docker_gwbridg 网络基础…

原理Redis-SkipList

SkipList ZipList和QuickList的共同特点是节省内存。在遍历元素时&#xff0c;只能从头到尾或从尾到头&#xff0c;所以在查找头尾元素性能还是不错的&#xff0c;但是中间元素查询的性能就会差。 **SkipList&#xff08;跳表&#xff09;**首先是链表&#xff0c;但与传统链表…

微软离Altman越近,离OpenAI就越远!

大数据产业创新服务媒体 ——聚焦数据 改变商业 在OpenAI这场连续剧中&#xff08;之所以说是连续剧&#xff0c;这个事情肯定没完&#xff0c;后面肯定还会出续集&#xff09;&#xff0c;让我倍感意外的是&#xff0c;Altman刚跟OpenAI分手&#xff0c;“离婚手续”都还没办…

HIEE300024R4 UAA326A04解答机器设备的研究成果

​ HIEE300024R4 UAA326A04解答机器设备的研究成果 中国的工业机器人仍然处于初级阶段&#xff0c;但未来前景可期 8月15日-8月19日&#xff0c;在北京亦庄国际会展中心举办了为期五天的2018世界机器人大会。该展会分为论坛、展览与大赛三种参览形式&#xff0c;而展览区由工业…