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

2024-04-07 14:44

本文主要是介绍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}

这篇关于10.java openCV4.x 入门-特殊的Mat类汇总(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/882880

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定