Python-opencv通过距离变换提取图像骨骼

文章目录

    • 距离变换
    • distanceTransform函数

距离变换

如果把二值图像理解成地形,黑色表示海洋,白色表示陆地,那么陆地上任意一点,到海洋都有一个最近的距离,如下图所示,对于左侧二值图像来说,【dist-bg】为其白色区域的骨骼;【dist-fg】为黑色区域的骨骼。

在这里插入图片描述

实现代码如下

import numpy as np
import matplotlib.pyplot as plt
from scipy.misc import ascent
import cv2img = ascent().astype(np.uint8)bImgs = {}
th, bImg = cv2.threshold(img, 0, 255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
bImgs[f'otsu({th})'] = bImgbImgs["dist-bg"] = cv2.distanceTransform(bImg, cv2.DIST_L2,5)
bImgs["dist-fg"] = cv2.distanceTransform(255-bImg, cv2.DIST_L2,5)for i,key in enumerate(bImgs,1):plt.subplot(1,3,i)plt.imshow(bImgs[key], cmap='gray')plt.title(key)plt.axis('off')plt.show()

distanceTransform函数

【distanceTransform】函数的功能是,计算当前像素点到零像素点的最短距离,其输入参数有三,分别是输入的二值图像;求解距离的类型,以及掩膜尺寸,一般可设为3或者5。

在一张图像中,两点之间的距离有多种计算方式,比如

  • a a a 水平和数竖直方向的变化量
  • b b b 对角方向的变化量
  • c c c 条约移动的变化量

距离变换函数综合了这三种距离,根据各种距离的权重不同,提供了下面几种不同的距离类别

distanceTypemaskSize参数
CV_DIST_C3 ( 3 × 3 ) (3\times3) (3×3) a = 1 , b = 1 a=1, b=1 a=1,b=1
CV_DIST_L13 ( 3 × 3 ) (3\times3) (3×3) a = 1 , b = 2 a=1, b=2 a=1,b=2
CV_DIST_L23 ( 3 × 3 ) (3\times3) (3×3) a = 0.955 , b = 1.3693 a=0.955, b=1.3693 a=0.955,b=1.3693
CV_DIST_L25 ( 5 × 5 ) (5\times5) (5×5) a = 1 , b = 1.4 , c = 2.1969 a=1, b=1.4, c=2.1969 a=1,b=1.4,c=2.1969

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

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

相关文章

Gitee的原理及应用详解(三)

本系列文章简介: Gitee是一款开源的代码托管平台,是国内最大的代码托管平台之一。它基于Git版本控制系统,提供了代码托管、项目管理、协作开发、代码审查等功能,方便团队协作和项目管理。Gitee的出现,在国内的开发者社…

漂流瓶挂机项目,聊天脚本赚钱新玩法,号称单机30-50+ (教程+软件)

一、项目简介: 漂流瓶挂机项目主要是通过使用探遇漂流瓶、音麦漂流瓶等聊天软件,为用户提供一个聊天赚钱的平台。男性用户需要充值后才能发送消息,而女性用户则可以通过接收消息赚取分红。男性用户发送给女性用户的消息费用大约在.1-.2元之间…

VScode中对git的学习笔记

1.git是什么? Git是一个功能强大的分布式版本控制系统,由Linux内核的创始人Linus Torvalds在2005年创建。它以其速度、数据完整性和支持大型项目的能力而闻名,被广泛应用于软件开发中。Git允许开发者在本地机器上拥有完整的代码库副本&#x…

读书笔记分享

1.苏格拉底只在需要的时候才索取,那样便能以最少的物质满足自身的要求。他认为每个人都天生体质脆弱,只有在贫乏的环境中才会锻炼地强壮起来。生活中的大多数人认为,奢华才是幸福的生活。无休止的物质积聚,让人们每天生活在一个内…

2024-05-27 blue-vh-问题点

摘要: 2024-05-27 思考-日记-问题点 问题点: 一. 同步接口的并发问题 接口调用是在客户端的的上下文,无论是线程,协程,是在客户端的执行上下文里面同步的话,是同步客户端的调用接口的上下文,阻塞的是客户端的上下文&a…

SashulinMessageBroker:在消息流中调用C++ DLL

一、背景 在现实应用中,算法、核心逻辑为了追求快速高效的运行速度,很多人都采用C来编写,并打包成动态库供外部使用。SMB针对这种应用场景,提供了DLL组件,实现在消息流中对DLL的动态调用。下实例讲解如何实现DLL as S…

多旋翼+发电机:国债应急系留照明无人机技术详解

多旋翼发电机技术的应急系留照明无人机是一种集成了先进飞行技术、发电技术和照明技术的无人机系统。这种无人机具有高度的灵活性、移动性和适应性,能够在各种复杂环境下迅速部署,为夜间搜救、救援等应急任务提供高效、可靠的照明支持。 无人机参数&…

融汇11款AI工具构建完美应用

本文将为您介绍25个开源项目,分为上下两篇以便您融汇它们来制作自己的AI应用。人工智能(AI)应用在近年来得到了长足的发展。从语音助手到软件开发,人工智能已在我们的生活中无处不在,并得到了广泛应用。 如您所见&…

构建智慧城市公共服务系统的功能架构设计

随着城市化进程的加速,城市公共服务系统在保障居民生活品质、提升城市管理水平方面扮演着愈发重要的角色。构建智慧城市公共服务系统的功能架构设计至关重要,它不仅需要充分考虑居民需求与城市管理的实际情况,还需要整合先进的科技手段&#…

LINGO:存贮问题

存贮模型中的基本概念 模型: 基本要素: (1)需求率:单位时间内对某种物品的需求量,用D表示。 (2)订货批量:一次订货中,包含某种货物的数量,用 Q表…

【MySQL精通之路】索引优化(2)

目录 1 MySQL如何使用索引 2 主键优化 3 空间索引优化 4 外键优化 5 列索引 6 多列索引 7 验证索引使用情况 8 InnoDB和MyISAM索引统计集合 9 B树索引与哈希索引的比较 9.1 B-树索引特征 9.2 哈希索引特征 10 索引扩展的使用 11 优化器使用生成的列索引 12 不可见…

【C语言】实现贪吃蛇--项目实践(超详细)

前言: 贪吃蛇游戏大家都玩过吧?这次我们要用C语言来亲手制作一个!这个项目不仅能让我们复习C语言的知识,还能了解游戏是怎么一步步做出来的。我们会一起完成蛇的移动、食物的生成,还有碰撞检测等有趣的部分。准备好了…

新计划,不断变更!做自己,接受不美好!猪肝移植——早读(逆天打工人爬取热门微信文章解读)

时间不等人 引言Python 代码第一篇 做自己,没有很好也没关系第二篇结尾 引言 新计划: 早上一次性发几个视频不现实 所以更改一下 待后面有比较稳定的框架再优化 每天早上更新 早到8点 晚到10点 你刚刚好上班或者上课 然后偷瞄的看两眼 学习一下 补充知…

SSM流浪宠物领养系统 毕业设计-附源码 270917

摘 要 流浪宠物一直是影响城市环境与居民生活的一个不可忽略的因素。基于此,本文设计并实现一个流浪宠物领养系统。用户可以通过本系统查看搜索流浪宠物的相关信息、进行领养申请,为其提供爱心帮助。本系统有效地解决了流浪宠物领养工作开展困难等问题&a…

STM32F1之OV7725摄像头·SCCB总线详解(附带源码编写)

STM32F1之OV7725摄像头-CSDN博客 STM32F1之OV7725摄像头像素数据输出时序、FIFO 读写时序以及摄像头的驱动原理详解-CSDN博客 目录 1. 硬件设计 1.1 SCCB 控制相关 1.2 VGA 时序相关 1.3 FIFO 相关 1.4 XCLK 信号 2. 代码设计 2.1 SCCB总线软件实现 2.1.1 宏定…

推荐系统三方参与者

1.信息生产者 信息生产者是指制作和发布网络信息内容的组织或个人。信息生产者的需求链路大致为:发布信息->期待曝光->期待阅读->期待奖励,需求得到满足,持续生产,再次进入链路循环。生产者持续创作的激情和动力很大程度…

go语言内置io包中TreeReader函数的理解和使用示例

在go语言的内置io包中的这个 TreeReader函数,函数原型 func TeeReader(r Reader, w Writer) Reader 从函数原型中看是给他一个Reader, 和一个Writer 然后他给你返回一个Reader, 本文中我们把这个返回的Reader叫做 treeReader, 他是一个很特别的reader…

利用STK分析雷达干扰

利用STK中的radar模块能够进行干扰分析。该模块能够用来确定干扰源(单站雷达、发射源),评估干扰对本机雷达性能的影响。 在分析干扰影响之前,首先设置一简单场景。 1、创建一个名为RadarJam的场景; 2、打开场景的Prop…

上位机图像处理和嵌入式模块部署(f103 mcu运行freertos)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 mcu一般有两个用途,一个是控制,一个是非控制。控制类的应用一般要求实时性比较高,什么时候做什么,都是有严格的时间要求的。而非控制类的应用,则要求实现尽可能多的功能,比如…

spring boot整合j2cache 配置项目全局键标识 帮助定位是哪个项目产生的缓存

我们利用 j2cache 存进 redis的缓存 key 可以加个全局标识 这样 到时看缓存 方便别人看是哪个项目存进去的 例如 这里 我们存入的 book 我们 keys * 查看 就知道是个book 但不知道具体来自那套系统 我们在 j2cache.properties 中加上 redis.namespace 项目全局键标识 我们…