当前位置: 首页 > news >正文

Opencv 学习笔记:距离变换(DIST_L1 算法实战 + 归一化)

距离变换是图像分割、前景提取的核心预处理技术,能计算每个前景像素到最近背景像素的距离。本文以DIST_L1(曼哈顿距离)为例,演示 OpenCV 距离变换全流程,重点讲解归一化的关键作用,新手可直接复用。

核心代码实现

import cv2 as cv import numpy as np # 1. 读取图像并预处理(补充完整流程) src = cv.imread('./image/test.bmp') # 替换为你的图像路径 if src is None: print('图像读取失败,请检查路径!') exit() # 转为灰度图→二值化(距离变换需输入单通道二值图) gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) ret, result2 = cv.threshold(gray, 127, 255, cv.THRESH_BINARY) # 2. 执行距离变换(核心操作) # 参数说明:二值图、距离类型(DIST_L1)、掩码尺寸(3×3) result3 = cv.distanceTransform(result2, cv.DIST_L1, cv.DIST_MASK_3) # 3. 归一化(关键:将距离值缩放到[0,1],适配显示) cv.normalize(result3, result3, 0, 1, cv.NORM_MINMAX, -1) # 4. 可视化结果(距离值映射为灰度图) # 归一化后的值×255转为uint8,便于显示 result_show = (result3 * 255).astype(np.uint8) cv.namedWindow('原始二值图', cv.WINDOW_NORMAL) cv.resizeWindow('原始二值图', 600, 600) cv.imshow('原始二值图', result2) cv.namedWindow('距离变换结果', cv.WINDOW_NORMAL) cv.resizeWindow('距离变换结果', 600, 600) cv.imshow('距离变换结果', result_show) cv.waitKeyEx(0) cv.destroyAllWindows()

关键知识点解析

1. 距离变换核心参数

参数说明作用
cv.DIST_L1曼哈顿距离(L1 距离)计算方式:`x1-x2+y1-y2`,计算速度快,无开方运算
cv.DIST_MASK_33×3 掩码尺寸掩码越大,距离计算越精准,但速度稍慢(常用 3/5/7)
cv.NORM_MINMAX最值归一化将距离值缩放到[0,1],消除不同图像距离值范围差异

2. 核心逻辑与避坑点

  • 输入要求:距离变换仅支持单通道二值图(非 0 为前景,0 为背景),需先完成灰度 + 二值化预处理,否则报错;
  • 归一化必要性:距离变换输出的原始值范围与图像尺寸相关(如 500×500 图像最大距离约 500),归一化后可统一到[0,1],既便于显示,也利于后续阈值筛选;
  • 显示转换:归一化后的float32类型值(0~1)需 ×255 转为uint8(0~255),否则 OpenCV 无法正确显示(会被识别为 0 值全黑)。

3. 常见距离类型对比

距离类型计算方式特点
DIST_L1(曼哈顿)$x1-x2+y1-y2$速度最快,无浮点运算
DIST_L2(欧氏)(x1−x2)2+(y1−y2)2​精度最高,符合人眼距离感知
DIST_C(切比雪夫)$max(x1-x2,y1-y2)$适用于棋盘格距离计算场景

总结

  1. 距离变换核心是cv.distanceTransform(),输入必须为单通道二值图,DIST_L1是速度优先的选择;
  2. 归一化(cv.normalize)是距离变换后必做步骤,可统一数值范围、便于可视化;
  3. 显示时需将归一化后的float32值 ×255 转为uint8,否则无法正常展示结果。
http://www.jsqmd.com/news/410136/

相关文章:

  • 深入底层:Qt 源码中那个“除以零”的宏定义神技
  • 豆包超能模式:全能AI助手的全新体验
  • AI写论文有妙招!4款AI论文生成工具,让写科研论文更高效!
  • 流量指纹混淆终极指南:模拟主流浏览器与合法应用的 TLS 指纹 (JA3/JA4) 实战
  • 2026年质量好的铠装缝/厂房铠装缝厂家采购参考指南(必看) - 品牌宣传支持者
  • 2026年靠谱的广东贝壳粉环保涂料/广东优质环保涂料厂家选购完整指南 - 品牌宣传支持者
  • AI写论文有妙招,这4款AI论文生成工具,让写职称论文更简单
  • 1985-2024年瞪羚、独角兽与科技型初创企业专利申请与授权信息
  • 算法导论阅读记录
  • .NET 10 C# 14 New Features 新增功能介绍-带修饰符的简单 lambda 参数
  • 【C++ vector】
  • AI 是怎么学会的?——从做错一道题说起
  • 2026年比较好的电摩机雕刻工具/打磨雕刻工具厂家热销推荐 - 品牌宣传支持者
  • Redis脑裂问题处理——基于min-replicas-to-write配置
  • 力扣解题-438. 找到字符串中所有字母异位词
  • 『NAS』在飞牛部署勉强能用的音乐下载器-Musicn
  • 闲置盒马鲜生礼品卡回收变现认准京顺回收平台 - 京顺回收
  • 朝阳宠物寄养哪家好?2026年条件和服务好的宠物寄养基地名单 - 品牌2025
  • 2026年靠谱的电机保护器/断电保护器优质厂家推荐汇总 - 品牌宣传支持者
  • 2026年靠谱的速冻黑鱼片/免浆黑鱼片品牌厂家推荐哪家强 - 品牌宣传支持者
  • 说说充电桩安装供应企业选购要点,哪家专业值得关注 - mypinpai
  • 2026年比较好的304不锈钢厨房拉篮/碗碟篮厨房拉篮厂家推荐与选购指南 - 品牌宣传支持者
  • 生态协同机制下的高校科技成果转化新模式
  • 2026年知名的企业食堂外包/医院食堂外包运营经验推荐 - 品牌宣传支持者
  • 别慌!Win 系统 BitLocker 密钥丢失 / 弹窗,官方正版恢复教程来了
  • 2026年口碑好的草坪护栏/学校护栏厂家信誉综合参考 - 品牌宣传支持者
  • 2026年口碑好的微波炉变压器温控器/温控开关用户口碑认可厂家 - 品牌宣传支持者
  • 区域科技成果转化服务:构建创新生态的桥梁
  • vlm识别桌面图标像素位置
  • 互联网大厂Java面试:从Java基础到微服务应用场景解析