opencv 基础54-利用形状场景算法比较轮廓-cv2.createShapeContextDistanceExtractor()

news2024/10/6 22:29:50

注意:新版本的opencv 4 已经没有这个函数 cv2.createShapeContextDistanceExtractor()

形状场景算法是一种用于比较轮廓或形状的方法。这种算法通常用于计算两个形状之间的相似性或差异性,以及找到最佳的匹配方式。

下面是一种基本的比较轮廓的流程,使用了形状场景算法:

  1. 数据准备: 首先,你需要准备两个形状的轮廓数据。轮廓可以表示为一系列的点坐标,或者更高级的表示方法,比如参数化的曲线等。

  2. 特征提取: 对于每个形状,你可以使用形状描述符或特征提取算法,将轮廓数据转化为一组能够表征形状的数值特征。这些特征可以是形状的曲率、长度、角度等等。

  3. 相似性度量: 选择一个相似性度量方法来比较两个形状的特征。常见的方法包括欧氏距离、曼哈顿距离、余弦相似度等。这些度量方法将两个形状的特征转化为一个相似性分数,分数越高表示形状越相似。

  4. 匹配与优化: 如果你想要找到最佳的形状匹配,可以使用优化算法来调整一个形状以使其与另一个形状更加相似。这可能涉及到形状的缩放、旋转、平移等变换。

  5. 可视化与解释: 最后,你可以可视化两个形状,展示它们的相似性以及在匹配过程中发生的变化。这可以通过绘制形状、展示变换等方式来实现。

需要注意的是,形状场景算法的选择取决于你所处理的具体问题和数据。不同的算法可能在不同的场景下表现更佳。一些常用的形状比较算法包括基于轮廓匹配的方法(如Frechet距离、Hausdorff距离)、基于特征的方法(如傅里叶描述符、轮廓矢量化等)、基于统计的方法(如Procrustes分析)等。

最终,选择适合你问题需求的方法,并根据实际情况进行调整和优化,以得到准确的形状比较结果。

利用形状场景算法比较轮廓与Hu 矩的区别

形状场景算法和Hu矩都是用于比较轮廓或形状的方法,但它们基于不同的原理和特征表示。

下面是它们之间的区别:

1. 原理和特征表示:

  • 形状场景算法: 形状场景算法基于整个形状的轮廓信息,通常通过提取一系列特征点的坐标来表示轮廓,然后计算这些特征点之间的几何关系、曲率等信息。这些算法可以比较两个形状之间的形状变化、缩放、旋转等变换。

  • Hu矩: Hu矩是一组与形状相关的不变矩,用于描述对象的整体形状特征。它们通过对轮廓的几何矩进行变换和归一化得到。Hu矩是一种用于表示形状的紧凑形式,能够在一定程度上保持形状的平移、旋转和缩放不变性。

2. 不变性:

  • 形状场景算法: 形状场景算法通常对形状的几何变换比较敏感,因此可能需要进行额外的处理来考虑形状的平移、旋转和缩放等变换。

  • Hu矩: Hu矩被设计用于保持一定的形状不变性,它们对于平移、旋转和缩放都具有一定程度的不变性。这使得Hu矩在某些形状匹配和识别任务中非常有用。

3. 适用领域:

  • 形状场景算法: 形状场景算法适用于需要考虑形状变换以及局部特征的情况。例如,可以用于比较两个形状的整体结构和曲率变化。

  • Hu矩: Hu矩适用于需要保持形状不变性的场景,例如对象识别、图像检索等。它们能够在一定程度上解决形状的旋转、平移和缩放变化对比较造成的影响。

OpenCV 提供了使用“距离”作为形状比较的度量标准。这是因为形状之间的差异值和距离有相似之处,比如二者都只能是零或者正数,又比如当两个形状一模一样时距离值和差值都等于零。

OpenCV 提供了函数 cv2.createShapeContextDistanceExtractor(),用于计算形状场景距离。

其使用的“形状上下文算法”在计算距离时,在每个点上附加一个“形状上下文”描述符,让每个点都能够捕获剩余点相对于它的分布特征,从而提供全局鉴别特征。

函数 cv2.createShapeContextDistanceExtractor()的语法格式为:

retval = cv2.createShapeContextDistanceExtractor( [, nAngularBins[,
nRadialBins[, innerRadius[, outerRadius[, iterations[, comparer[,
transformer]]]]]]] )

式中的返回值为 retval,返回结果。
该结果可以通过函数 cv2.ShapeDistanceExtractor.computeDistance()计算两个不同形状之间的距离。此函数的语法格式为:

retval=cv2.ShapeDistanceExtractor.computeDistance(contour1, contour2)

式中,coutour1 和 coutour2 是不同的轮廓。

函数 cv2.createShapeContextDistanceExtractor()的参数都是可选参数:

  • nAngularBins:为形状匹配中使用的形状上下文描述符建立的角容器的数量。
  • nRadialBins:为形状匹配中使用的形状上下文描述符建立的径向容器的数量。
  • innerRadius:形状上下文描述符的内半径。
  • outerRadius:形状上下文描述符的外半径。
  • iterations:迭代次数。
  • comparer:直方图代价提取算子。该函数使用了直方图代价提取仿函数,可以直接采用
    直方图代价提取仿函数的算子作为参数。
  • transformer:形状变换参数。

示例:使用函数 cv2.createShapeContextDistanceExtractor()计算形状场景距离。

import cv2
#-----------原始图像 o1 的边缘--------------------
o1 = cv2.imread('cs.bmp')
cv2.imshow("original1",o1)
gray1 = cv2.cvtColor(o1,cv2.COLOR_BGR2GRAY)
ret, binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY)
contours1, hierarchy = cv2.findContours(binary1,
 cv2.RETR_LIST,
 cv2.CHAIN_APPROX_SIMPLE)

cnt1 = contours1[0]
#-----------原始图像 o2 的边缘--------------------
o2 = cv2.imread('cs3.bmp')
cv2.imshow("original2",o2)
gray2 = cv2.cvtColor(o2,cv2.COLOR_BGR2GRAY)
ret, binary2 = cv2.threshold(gray2,127,255,cv2.THRESH_BINARY)
contours2, hierarchy = cv2.findContours(binary2,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

cnt2 = contours2[0]
#-----------原始图像 o3 的边缘--------------------
o3 = cv2.imread('hand.bmp')
cv2.imshow("original3",o3)
gray3 = cv2.cvtColor(o3,cv2.COLOR_BGR2GRAY)
ret, binary3 = cv2.threshold(gray3,127,255,cv2.THRESH_BINARY)
contours3, hierarchy = cv2.findContours(binary3,
 cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
cnt3 = contours3[0]

#-----------构造距离提取算子--------------------
sd = cv2.createShapeContextDistanceExtractor()

#-----------计算距离--------------------
d1 = sd.matchShapes(cnt1,cnt1)
print("与自身的距离 d1=", d1)
d2 = sd.matchShapes(cnt1,cnt2)
print("与旋转缩放后的自身图像的距离 d2=", d2)
d3 = sd.matchShapes(cnt1,cnt3)
print("与不相似对象的距离 d3=", d3)

cv2.waitKey()
cv2.destroyAllWindows()





运行后报错:

在这里插入图片描述

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

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

相关文章

B2B2C多商户电子商务网站开发--海外商城系统搭建

一、明确目标与需求 在开始搭建海外商城系统之前,企业需要明确自己的目标和需求。例如,要面向哪些国家和地区、主要销售哪些产品、需要提供哪些语言和货币支持等。这些目标和需求将有助于企业制定合理的开发计划和方案。 二、选择合适的开发平台和工具…

【安装部署】Mysql下载及其安装的详细步骤

1.下载压缩包 官网地址:www.mysql.com 2.环境配置 1.先解压压缩包 2.配置环境变量 添加环境变量:我的电脑--->属性-->高级-->环境变量-->系统变量-->path 3.在mysql安装目录下新建my.ini文件并,编辑my.ini文件 编辑内容如…

Linux常规操作命令

日升时奋斗,日落时自省 目录 1、vim 1.1、工作模式 1.2、末行模式操作相关命令 1.2.1、保存退出操作 1.2.2、查找替换 1.3、输入模式操作相关命令 1.3.1、移动相关命令 1.3.2、删除和剪切命令 1.3.3、复制操作 1.3.4、撤销 2、head 3、tail 4、ps 5、…

HTTP代理与HTTPS代理请求的方式揭秘

今天,我们要一起来揭秘HTTP代理与HTTPS代理请求的方式,帮助大家更好地理解和使用这两种代理。我们将分析它们的不同之处,并提供一些实际的例子和操作经验,让你轻松玩转网络请求! HTTP代理请求方式: HTTP代…

IBM Spectrum LSF 分布式系统(作业调度系统),提高高性能计算(HPC)的价值

IBM Spectrum LSF Suites 凭借更快的处理和更轻松的处理,提高高性能计算的价值 要点 通过隐藏工作负载密集型计算环境的复杂性,提高用户生产效率简化计算集群管理并划分工作负载优先级,以快速满足竞争激烈的行业瞬息万变的需求通过优化系统…

LLM - CUDA out of memory. 到底怎么事

目录 一.引言 二.报错日志 1.日志数据 2.日志提示 ◆ max_split_size_mb ◆ See documentation ◆ 更多解决方案 三.日志扩展 1.Reserved Memory 是什么? 2.Tired to allocate 小于 free MiB 就会报 OOM 嘛? 3.already allocated 是当前任务占用内存&a…

【高危】 Microsoft Teams 远程代码执行漏洞

漏洞描述 Microsoft Teams 是微软推出的一款团队协作平台,提供了聊天、通话、在线会议、文件共享等功能。 Microsoft Teams 受影响版本中,当用户加入攻击者设置的恶意 Microsoft Teams 会议时,攻击者可远程执行任意代码。 漏洞名称Microso…

游戏类APP的如何设置广告场景最大化用户价值?提升变现收益?

最近几年,游戏类市场的不断增长激发了广告主预算的不断投入,越来越多的游戏类APP通过广告变现的方式增收,并且获得持续上涨的eCPM。 具有潜力的游戏品类参考 根据游戏品类的增长数据和广告收益规模,休闲/模拟/街机均为收益正向的…

Echarts 让饼图中间文字居中并自适应图表

背景: 产品提出需求在饼图中间放两行文字且居中 “简单,劈劈啪啪写完了” 产品再提出你这个没有自适应啊,屏幕放大、缩小你这个就没有居中了,甚至会和饼图重叠 “emmmmm…" UI图如下: 方案一:使用ti…

数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)

目录 开放地址法(Open Addressing) 线性探测(Linear Probing) 散列表查找性能分析 平方探测(Quadratic Probing) 定理 平方探测法的查找与插入 双散列探测法(Double Hashing&#xff09…

【C语言】经典题目(四)

HI,大家好~😝😝这是一篇C语言经典题目的博客。 更多C语言经典题目及刷题篇,可以参考: 🌸 【C语言】经典题目(一) 🌸 【C语言】经典题目(二) 🌸 【C语言】经典题目(三) 🌸…

生信分析pandas数据处理 Python简明教程 | 视频17

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在:https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

ant design pro 中ModalForm的参数open无法控制的问题

根据antd自己的说明,visible这个参数在下个版本会被替换成open,所以今天我试着用open。 但是用了open之后发现这个model弹不出来,用visible是正常的。 那么问题在哪呢?又是在import的位置不对 open可以使用的是: imp…

在2023年及以后可以改善企业业务的五种软件

在当今互通互联的世界,依赖人工流程和传统方法的日子早已过去。目前,各种各样的软件解决方案有助于推动企业走向成功。这些解决方案是重塑客户关系、优化项目工作流程、革新财务管理实践以及通过沉浸式的培训体验增强员工能力的关键。 采用软件解决方案…

政府部门联合开展智能制造试点示范行动,对企业发展有哪些利好?

智能制造(也称为工业 4.0 或工业物联网 (IIoT))的试点示范可以为业务发展带来诸多好处。主要优势体现在: 1.提高效率:智能制造集成了自动化、数据分析、人工智能和机器学习等先进技术。这些技术优化了生产流程,从而提…

Ubuntu 20.04 APT 方式安装 mysql 5.7

Ubuntu 20.04 直接 apt 安装的 mysql 是 8.0 ,现在需要安装 5.7 版本,还颇费周章!按照文档直接点进去那个 MySQL APT Repository 中(https://dev.mysql.com/downloads/repo/apt/)只显示了 8.0 ,没有其他版本…

ClickHouse(十六):Clickhouse MergeTree系列表引擎 - CollapsingMergeTree

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

风丘科技将亮相 EVM ASIA 2023

风丘科技将首次亮相 EVM ASIA 2023 WINDHILL will debut EVM ASIA 2023 ——可持续移动的未来 —The Future of SUSTAINABLE Mobility EVM ASIA 2023是亚太地区电气化的国际性展会,专注于新能源汽车、充电技术及汽车零件制造等。展会致力于促进包括充电站、交通…

SpringBoot(十)SpringBoot自定义starter

一个月的时间,转眼已经到了我的SpringBoot系列的第十篇文章。还记得我的第二篇文章SpringBoot(二)starter介绍_springboot的starter_heart荼毒的博客-CSDN博客 曾经介绍过starter。starter除了官方提供的以外,我们也可以自定义。本…

【前端 | CSS】align-items与align-content的区别

align-items 描述 CSS align-items 属性将所有直接子节点上的 align-self 值设置为一个组。align-self 属性设置项目在其包含块中在交叉轴方向上的对齐方式 align-items是针对每一个子项起作用,它的基本单位是每一个子项,在所有情况下都有效果&…