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,一经查实,立即删除!

相关文章

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 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值…

最好用的安卓按钮(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;避免额外空间的开…

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

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

【热门话题】Stable Diffusion:本地部署教程

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Stable Diffusion&#xff1a;本地部署教程一、引言二、环境准备1. 硬件配置2. …

springboot项目框架讲解

文章目录 1.项目文件结构2.数据库连接信息3.其他配置信息4.java代码文件目录介绍5.entity层代码6.controller&#xff0c;service&#xff0c;dao&#xff0c;entity层之间的关系7.controller层代码8.登陆拦截功能实现9.文件上传功能 1.项目文件结构 2.数据库连接信息 3.其他配…

ETL中如何自定义规则

一、ETL中的规则 在使用规则之前我们先来了解一下什么是规则&#xff0c;ETL中规则在很多组件中都能看见&#xff0c;可以理解为按照事前约定好的逻辑去执行&#xff0c;规则可以使得数据更加的规范统一&#xff0c;同时也不需要去纵向的修改底层代码&#xff0c;只需要动态编…

【Frida】【Android】 工具篇:查壳工具大赏

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

LiveGBS流媒体平台GB/T28181常见问题-系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤

LiveGBS系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤 1、系统服务日志1.1、日志目录1.2、配置日志文件个数及记录时间1.3、配置日志文件路径 2、Web 操作日志2.1、配置保留天数2.2、配置不记录操作日志2.1.1、不记录所有2.1.2、不记录指定…

Golang中的上下文-context包的简介及使用

文章目录 简介context.Background()上下文取消函数上下文值传递建议Reference 简介 Go语言中的context包定义了一个名为Context的类型&#xff0c;它定义并传递截止日期、取消信号和其他请求范围的值&#xff0c;形成一个链式模型。如果我们查看官方文档&#xff0c;它是这样说…

java.lang.NoClassDefFoundError: javax/validation/constraints/Min

1、报错截图 2、解决办法 添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>

基于SpringBoot Vue单位考勤管理系统

一、&#x1f4dd;功能介绍 基于SpringBoot Vue单位考勤管理系统 角色&#xff1a;管理员、员工 管理员&#xff1a;管理员进入系统主页面&#xff0c;主要功能包括对首页、个人中心、员工管理、部门信息管理、职位信息管理、加班申请管理、打卡信息管理、工作汇报管理、请假…

SpringBoot属性配置的多种方式

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot属性配置的多种方式 📚个人知识库: Leo知识库,欢迎大家访问 目录 …

论文阅读——MVDiffusion

MVDiffusion: Enabling Holistic Multi-view Image Generation with Correspondence-Aware Diffusion 文生图模型 用于根据给定像素到像素对应关系的文本提示生成一致的多视图图像。 MVDiffusion 会在给定任意每个视图文本的情况下合成高分辨率真实感全景图像&#xff0c;或将…

备战蓝桥杯---数论相关问题

目录 一、最大公约数和最小公倍数 二、素数判断 三、同余 四、唯一分解定理 五、约数个数定理 六、约数和定理 五、快速幂 六、费马小定理 七、逆元 一、最大公约数和最小公倍数 文章链接&#xff1a;最大公约数和最小公倍数 二、素数判断 文章链接&#xff1a;在J…

C语言——#define的使用

#define定义常量 基本语法 #define name stuff //&#xff08;#define&#xff09;&#xff08;变量名&#xff09;&#xff08;定义的数值&#xff09; 这里记得&#xff0c;是不加分号的 定义常量&#xff08;这里 就要涉及我们经常说的宏定义&#xff09; 定义常量的使…

Python爬虫-爬取药膳食谱数据

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;喜欢的话麻烦您点个&#x1f44d;和⭐&#xff01; &#x1f388;…