10.java openCV4.x 入门-特殊的Mat类汇总(二)

专栏简介

💒个人主页
📰专栏目录

点击上方查看更多内容
📖心灵鸡汤📖

我们唯一拥有的就是今天,唯一能把握的也是今天


建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫
🧭文章导航🧭
⬆️ 9.特殊的Mat类汇总(一)
⬇️ 11.待更新

特殊的Mat类汇总(二)

  • 特殊的Mat类汇总(二)
  • 一、MatOfDMatch
    • 1.构造函数
    • 2.DMatch类
      • 1.构造函数
      • 2.方法介绍
  • 二、MatOfKeyPoint
    • 1.构造函数
    • 2.KeyPoint类
      • 1.构造函数
  • 三、MatOfPoint
    • 1.构造函数
    • 2.Point类
  • 四、MatOfPoint2f
  • 五、MatOfPoint3
    • 1.构造函数
    • 2.Point3类
      • 1.构造函数
      • 2.方法介绍
  • 六、MatOfPoint3f
  • 七、MatOfRect
    • 1.构造函数
    • 2.Rect类
  • 八、MatOfRect2d
  • 九、MatOfRotatedRect
    • 1.构造函数
    • 2.RotatedRect类
      • 1.构造函数
      • 2.方法介绍
        • 1.boundingRect
        • 2.points​(Point[] pt)

特殊的Mat类汇总(二)

   1. 本节中列举的类的作用用于表示图像的轮廓点或矩形相关的数据信息。
   2. 方法可参考 9.特殊的Mat类汇总(一),本节仅列出不同的地方。
   3. 本文示例不考虑上下文

一、MatOfDMatch

   MatOfDMatch用于存储特征点的匹配信息。包括匹配的特征点在两个图像中的索引和它们之间的距离。它是一个二维矩阵,每一行表示一个匹配对,每个匹配对由两个特征点的索引和它们之间的距离组成。

1.构造函数

在这里插入图片描述

MatOfDMatch​(DMatch... ap)
参数:
ap DMatch对象
        DMatch dMatch1 =new DMatch(0,0,0,2f);DMatch dMatch2 =new DMatch(2,2,2,4f);// 使用构造函数创建MatOfDMatch对象,并传入两个DMatch对象MatOfDMatch match=new MatOfDMatch(dMatch1,dMatch2);//打印对象内容System.out.println("match.dump() :\n " + match.dump());

2.DMatch类

   DMatch 类是用于表示两幅图像之间的匹配关系的类。

1.构造函数

在这里插入图片描述

DMatch​(int _queryIdx, int _trainIdx, int _imgIdx, float _distance)
参数:
_queryIdx 查询图像中描述符的索引。这个参数表示在查询图像中,与训练图像中的匹配描述符相对应的描述符的索引位置
_trainIdx训练图像中描述符的索引。这个参数表示在训练图像中,与查询图像中的匹配描述符相对应的描述符的索引位置
_imgIdx 在训练图像中的匹配图像索引。这个参数提供了关于匹配特征点来自哪个训练图像的信息
_distance 描述符之间的距离。这个参数表示两个描述符之间的相似性度量,通常用于筛选匹配结果

2.方法介绍

1.比较两个 DMatch 对象,并根据给定的比较条件返回一个布尔值

lessThan​(DMatch it)
参数:
it 与当前 DMatch 对象进行比较的对象
  比较的依据通常是基于 DMatch 对象的字段值,例如 distance(距离)字段。 如果当前对象的某个字段值小于比较对象的对应字段值,则返回 true,否则返回 false。这个方法通常用于排序或查找操作,例如在匹配结果中进行筛选或查找最佳匹配
        // 创建两个 DMatch 对象DMatch match1 = new DMatch(0, 0, 0, 2.0f);DMatch match2 = new DMatch(0, 0, 0, 1.0f);// 比较两个 DMatch 对象if (match1.lessThan(match2)) {System.out.println("match1 小于 match2");} else {System.out.println("match1 不小于 match2");}

二、MatOfKeyPoint

  MatOfKeyPoint用于存储关键点的信息。

MatOfKeyPoint类的作用包括:
  1.存储关键点的位置和尺度信息:每个关键点由其在图像中的坐标和尺度大小表示。
  2.存储关键点的特征描述符:关键点通常与其周围的图像区域相关联,可以通过计算该区域的特征描述符来表示关键点的特征。
  3.支持关键点的检测和提取:可以使用MatOfKeyPoint类中的方法来检测图像中的关键点,并提取关键点的特征描述符。
  4.支持关键点的匹配和跟踪:可以使用MatOfKeyPoint类中的方法来进行关键点的匹配和跟踪,用于目标检测、图像配准等任务。

1.构造函数

1.将给定的Mat对象转换为MatOfKeyPoint对象

MatOfKeyPoint​(Mat m)
参数:
m mat数据类型需为 CV_32FC(7),且需要1行多列或1列多行(cols=7,rows>0,CvType.CV_32FC1也可,请自行验证)
  			Mat mat=new Mat(2,1, CvType.CV_32FC(7));mat.put(0,0,1,2,3,4,5,6,7,8,9,10,11,12,14,14);MatOfKeyPoint keyPoint=new MatOfKeyPoint(mat);System.out.println("keyPoint.dump() = " + keyPoint.dump());
  1. 创建一个MatOfKeyPoint对象,并将传入的KeyPoint类型的数组作为初始数据
MatOfKeyPoint​(KeyPoint... a)
参数:
a KeyPoint 数组

2.KeyPoint类

  KeyPoint 类是用于表示特征检测中的关键点的。关键点是图像中具有显著特征的区域,例如角点、边缘或其他结构。特征检测是计算机视觉中的一项重要任务,用于识别和定位图像中的关键点,以便进一步进行特征描述、匹配或物体检测等操作。

1.构造函数

在这里插入图片描述
这里仅对其中一个构造函数进行说明。

KeyPoint​(float x, float y, float _size, float _angle, float _response, int _octave, int _class_id)
参数:
x关键点的 x 坐标
y 关键点的 y 坐标
_size 关键点的尺度,表示关键点的大小或半径
_angle 关键点的方向,表示关键点所在的边缘或结构的方向
_response关键点的响应值,表示该关键点在特征检测算法中的显著性或匹配度
_octave 关键点所在的图像八度(octave),用于多尺度特征检测时标识关键点所在的尺度层级
_class_id关键点的类别 ID,用于标识关键点所属的类别或类型

三、MatOfPoint

   用于表示图像中的轮廓点的类(表示二维空间中的轮廓点)

MatOfPoint类的主要作用包括:
  1.存储轮廓点集:MatOfPoint类可以用来存储图像中的轮廓点集。轮廓是图像中的连续边界,由一组点表示。MatOfPoint类可以存储这些点,并提供对这些点的访问和操作方法。
  2.访问轮廓点:MatOfPoint类提供了一些方法来访问轮廓中的点。可以通过索引访问单个点,也可以通过迭代器遍历所有的点。 。
  3.转换为其他数据结构:MatOfPoint类可以将轮廓点集转换为其他数据结构,如数组或列表。这样可以更方便地使用这些点进行进一步的分析和处理。
  4.计算轮廓的面积和周长:MatOfPoint类提供了计算轮廓的面积和周长的方法。这些信息对于图像分析和处理非常有用。

1.构造函数

在这里插入图片描述

MatOfPoint​(Mat m)
参数:
m mat数据类型需为 CV_32SC2
mat数据类型: CV_32SC1: rows>0,cols=2 CV_32SC2: rows>0,cols=1或 rows=1,cols>0
          Mat mat=new Mat(1,2, CvType.CV_32SC2);MatOfPoint matOfPoint=new MatOfPoint(mat);System.out.println("matOfPoint.dump() :\n " + matOfPoint.dump());

2.Point类

  相关说明参考:6.Mat之局部区域读写及Range和Rect介绍

四、MatOfPoint2f

   与MatOfPoint一样用于表示二维点集的类,它的坐标类型为浮点型。便于更加精确的操作点集。

五、MatOfPoint3

   用于表示图像中的轮廓点的类(表示三维空间中的轮廓点)

1.构造函数

在这里插入图片描述

MatOfPoint3​(Mat m)
参数:
m mat数据类型需为CV_32SC3,且需要1行多列或1列多行(CV_32SC1,rows>0,cols=3也可)
            Mat mat=new Mat(4,1, CvType.CV_32SC3);MatOfPoint3 matOfPoint=new MatOfPoint3(mat);System.out.println("matOfPoint.dump() :\n " + matOfPoint.dump());

2.Point3类

   Point3类是一个表示三维坐标点的类。它在三维空间中定义了一个点的坐标,包括x、y和z坐标。Point3类通常用于表示三维物体的位置、方向或者其他特征

1.构造函数

在这里插入图片描述

2.方法介绍

   列举部分方法。

  1. 计算两个三维向量的叉乘
cross​(Point3 p)
参数:
pPoint3对象

   使用cross方法可以计算两个向量的叉乘,并得到一个新的向量。这在计算机图形学和计算机视觉中经常用于计算法向量、平面的法向量、光线的反射方向等。

两个三维向量的叉乘公式可以表示为:
A × B = (A2B3 - A3B2, A3B1 - A1B3, A1B2 - A2B1)
其中,A = (A1, A2, A3) 和 B = (B1, B2, B3) 是两个三维向量
        Point3 p3_1 = new Point3(1,2,3);Point3 p3_2 = new Point3(2,3,4);Point3 cross = p3_1.cross(p3_2);System.out.println("cross.toString() = " + cross.toString());
  1. 计算当前点与另一个点p的点积(dot product)
dot​(Point3 p)
参数:
p Point3对象
   如果点积的结果为正数,则表示两个向量之间的夹角小于 90 度;如果点积的结果为负数,则表示两个向量之间的夹角大于 90 度;如果点积的结果为零,则表示两个向量之间的夹角为 90 度(垂直)。
计算公式可以表示为:
dot = a.x * b.x + a.y * b.y + a.z * b.z
其中a.x、a.y和a.z分别表示向量a在x、y和z轴上的坐标,b.x、b.y和b.z分别表示向量b在x、y和z轴上的坐标
        Point3 point1=new Point3(1,2,0);Point3 point2=new Point3(2,4,0);double dot = point1.dot(point2);System.out.println("dot = " + dot);

六、MatOfPoint3f

   与MatOfPoint一样用于表示三维点集的类,它的坐标类型为浮点型。便于更加精确的操作点集。

七、MatOfRect

   MatOfRect类的主要作用是在图像或视频中检测和定位矩形对象。它通常用于目标检测、人脸识别、车牌识别等计算机视觉任务中。

MatOfRect类具有以下主要功能和方法:
  1.存储矩形对象: MatOfRect类可以存储一组矩形对象,每个矩形对象由四个整数表示,分别表示矩形的左上角坐标和宽度、高度。
  2.访问矩形对象: 可以通过索引访问MatOfRect对象中的矩形对象,获取矩形的位置和大小信息。
  3.操作矩形对象: 可以对MatOfRect对象中的矩形对象进行操作,如添加、删除、修改等。
  4.矩形对象的转换: 可以将MatOfRect对象转换为其他数据结构,如矩形数组、列表等。

1.构造函数

在这里插入图片描述

MatOfRect​(Mat m)
参数:
mmat数据类型需为 CV_32SC4,且需要1行多列或1列多行(CV_32SC1,rows>0,cols=4也可)
        Mat mat = new Mat( 4,1, CvType.CV_32SC4);MatOfRect matOfRect = new MatOfRect(mat);System.out.println("matOfRect.dump() :\n " + matOfRect.dump());

2.Rect类

  相关说明参考:6.Mat之局部区域读写及Range和Rect介绍

八、MatOfRect2d

   与MatOfRect一样,但是使用double类型的坐标表示

九、MatOfRotatedRect

   MatOfRotatedRect 类是一个特殊的Mat类,用于存储旋转矩形对象的数据。旋转矩形是一个带有角度信息的矩形,通常用于表示图像中的物体或区域。

1.构造函数

在这里插入图片描述

MatOfRotatedRect​(Mat m)
参数:
mmat数据类型需为 CV_32FC(5),且需要1行多列或1列多行(CV_32FC1,rows>0,cols=5也可)
        Mat mat =new Mat(3,1, CvType.CV_32FC(5));MatOfRotatedRect matOfRotatedRect = new MatOfRotatedRect(mat);System.out.println("matOfRotatedRect.dump() :\n " + matOfRotatedRect.dump());

2.RotatedRect类

   用于表示旋转矩形的类,它可以具有任意旋转角度。

1.构造函数

在这里插入图片描述
1.

RotatedRect​(Point c, Size s, double a)
参数:
c旋转矩形的中心点坐标,为一个Point对象
s旋转矩形的尺寸,为一个Size对象,表示矩形的宽度和高度
a旋转矩形的旋转角度,以度为单位
RotatedRect​(double[] vals)
参数:
vals一个包含5个元素的double数组,依次表示旋转矩形的中心点坐标(x, y),宽度width,高度height,以及旋转角度angle
        double vals[]={4,4,5,5,-10};RotatedRect rotatedRect = new RotatedRect(vals);System.out.println("rotatedRect.toString() = " + rotatedRect.toString());

结果:

rotatedRect.toString() = { {4.0, 4.0} 5x5 * -10.0 }

2.方法介绍

   仅列举部分

1.boundingRect

   计算RotatedRect对象的最小外接矩形(即包围矩形)


public class RotatedRectExample {public static void main(String[] args) {Point point =new Point(4,4);Size size = new Size(2,2);RotatedRect rotatedRect = new RotatedRect(point,size,0);System.out.println("rotatedRect.toString() = " + rotatedRect.toString());Rect rect = rotatedRect.boundingRect();System.out.println("rect.toString() = " + rect.toString());}
}

结果:

rotatedRect.toString() = { {4.0, 4.0} 2x2 * 0.0 }
rect.toString() = {3, 3, 3x3}

2.points​(Point[] pt)

  获取旋转矩形的四个顶点坐标。


public class PointsExample {public static void main(String[] args) {// 创建一个旋转矩形对象RotatedRect rotatedRect = new RotatedRect(new Point(100, 100), new Size(20, 20), 0);// 创建一个Point数组用于存储顶点坐标Point[] points = new Point[4];// 获取旋转矩形的顶点坐标rotatedRect.points(points);for (Point point : points) {System.out.println("point.toString() = " + point.toString());}}
}

结果:

point.toString() = {90.0, 110.0}
point.toString() = {90.0, 90.0}
point.toString() = {110.0, 90.0}
point.toString() = {110.0, 110.0}

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

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

相关文章

原型设计模式的学习

哪位大佬帮我看看关于“原型设计模式”的问题 写作原因: 我需要了解原型模式,但网上的说法是:通过一个clone方法来创建对象。然而,这并没有解答关于“效率”的问题: 以下是以怪物游戏和深拷贝为例来说明的:…

Linux 常用指令及其理论知识

个人主页:仍有未知等待探索-CSDN博客 专题分栏:http://t.csdnimg.cn/Tvyou 欢迎各位指教!!! 目录 一、理论知识 二、基础指令 1、ls指令(列出该目录下的所有子目录和文件) 语法: …

论文阅读——Sat2Vid

Sat2Vid: Street-view Panoramic Video Synthesis from a Single Satellite Image 提出了一种新颖的方法,用于从单个卫星图像和摄像机轨迹合成时间和几何一致的街景全景视频。 即根据单个卫星图像和给定的观看位置尽可能真实地、尽可能一致地合成街景全景视频序列。…

Docker中Mysql报 mbind: Operation not permitted

问题 我们在docker中安装的mysql运行时报 mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted原因 这是Docker的Seccomp安全限…

[leetcode] 25. K 个一组翻转链表

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值…

MySQL(目录)

作者:码农出击 链接:https://www.zhihu.com/question/632989513/answer/3312494291 来源:知乎 著作权归作者所有。 MySQL数据库(7天~15天) 1、数据存储引擎:InnoDB、myISAM、Memory 2、数据库索引类型及原…

最好用的安卓按钮(3)

属性解释 按钮文字 app:text“床前明月光” 按钮文字颜色 app:textColor“color/color_white” 按钮文字大小 app:textSize“22sp” 按钮背景颜色 app:color_normal“color/color_accent” 0x2 单独设置每个圆角 效果 代码 <top.androidman.SuperButton android:layo…

替换空格(替换特定字符)

&#x1f600;前言 在字符串处理中&#xff0c;经常会遇到需要替换特定字符的情况。本文将介绍一道经典的字符串替换问题&#xff1a;将字符串中的空格替换成 “%20”。我们将探讨一种高效的解决方法&#xff0c;通过倒序遍历字符串来实现原地替换&#xff0c;避免额外空间的开…

也说说Sybase ASE中的空间膨胀及应对方案

前言 直观来讲,数据库是典型的以空间换时间的思路去提高数据检索的效率。我们先把数据“入”进去,组织好,建好索引,都为了什么?相当大一部分只不过是为了最终能快速得到查询的结果。当然这又引发了好多子项,比如,怎么“入”得快而又不发生冲突,怎么在相对少的资源的情…

OpenCV中的模块:三维重建-SFM(2)

接上一篇文章,本篇将介绍SFM模块在windows平台上的编译。与Ubuntu下的过程类似,主要过程也是依赖库的下载、编译及安装,不同点是:与Ubuntu直接安装不同,windows下我们将对库的依赖关系更加清晰。 1. 依赖库的编译 打开相应库的最外层CMakeLists.txt所在的目录,库的编译过…

机器学习_PySpark-3.0.3文本特征提取(TF-IDF)流程

机器学习_PySpark-3.0.3文本特征提取(TF-IDF)流程 本例中 Tokenizer 是用于分词的模块。 本例中 HashingTF().tranform() 函数把词哈希成特征向量, 返回结果是 Vectors.sparse() 类型的。 本例中 IDF 类用于计算给定文档集合的反文档频率, 是一个词普遍重要性的度量 (即: 一…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(八)- 向量整数算术指令

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

Linux 内核的构建块:深入探索 C 结构体的应用

Linux 内核的构建块&#xff1a;深入探索 C 结构体的应用 Linux 内核&#xff0c;作为操作系统的中心和基础&#xff0c;承担着调度处理器、管理内存、处理输入/输出&#xff08;I/O&#xff09;等各种底层任务。要实现这些复杂的功能&#xff0c;内核的编写借助了 C 语言强大…

SAP FICO接口-OA-调取SAP供应商明细接口(应付预付明细)开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

需求说明: 根据OA查询条件查询ZVACDOCAZVACDOCA-BUKRS=查询公司代码; ZVACDOCA- LIFNR=查询供应商代码; ZVACDOCA-BELNR=查询凭证编号; ZVACDOCA-GJAHR=查询会计年度; ZVACDOCA-AWKEY=查询采购发票号*; ZVACDOCA-BLART≠W* ZVACDOCA-AUGBL=空 ZVACDOCA- XREVERSED…

ShrewSoft VPN无法连接.报错failed to attach to key daemon的解决方案

今天突然发现使用的ShrewSoft VPN 软件来连接公司网络。但是连接过程中&#xff0c;报错 “Fail to attach to key daemon” 解决步骤&#xff1a; 1. 重启电脑&#xff0c;可以解决90%问题。 2. 可能和ShrewSoft 相关的服务没有启动有关。 于是检查服务状态。 2.1 按Wind…

中国省级基础设施网络完善进程:2000-2022年数据分析与展望(无缺失值)

01、数据介绍 基础设施&#xff0c;作为为社会生产和居民生活提供公共服务的物质工程设施&#xff0c;是一个用于保证社会经济活动正常进行的公共服务系统。它不仅包括交通设施&#xff0c;还涵盖了邮电、供水供电、商业服务、科研与技术服务、园林绿化、环境保护、文化教育、…

富格林:明示虚假现象确保安全

富格林认为&#xff0c;当下的金融市场&#xff0c;投资者进行理财时都会特别关注盈利效率高的产品&#xff0c;而近来兴起的现货黄金则以此优势吸引着大批人关注。不过现货黄金市场相对于其他投资市场来说&#xff0c;会复杂一点不乏会蕴含着虚假现象。因此要确保我们的交易安…

Linux诊断机器故障工具—dmesg命令

在 Linux 系统中&#xff0c;经常会遇到各种各样的故障和问题&#xff0c;这些问题可能会导致系统性能下降、服务异常甚至系统崩溃。而 dmesg 命令是一个强大的工具&#xff0c;可以帮助我们诊断和解决这些故障。我们将介绍如何使用 dmesg 命令来分析和解决 Linux 系统中的常见…

基于单片机分舱式电开水炉位控制系统

**单片机设计介绍&#xff0c;基于单片机分舱式电开水炉位控制系统 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机分舱式电开水炉位控制系统概要主要涉及通过单片机对电开水炉的各个舱位进行精确控制&#xff0c;实现水位、温度…

Impala Daemon无法启动问题记录(25000端口被占用)

前言&#xff1a;集群主节点根目录内存快爆了&#xff0c;开始清理主节点内存重启组件&#xff0c;发现Kerberos认证的角色用户都过期了&#xff0c;又重新生成了一下角色&#xff0c;在启动impala组件过程中&#xff0c;其中一个Impala Daemon组件启动失败。 集群版本&#xf…