嘉兴白酒网站建设,小程序定制开发和模板有什么区别,网站网站代理怎么做的,学做旗袍衣服的网站距离变换是图像分割、前景提取的核心预处理技术#xff0c;能计算每个前景像素到最近背景像素的距离。本文以DIST_L1#xff08;曼哈顿距离#xff09;为例#xff0c;演示 OpenCV 距离变换全流程#xff0c;重点讲解归一化的关键作用#xff0c;新手可直接复用。核心代码…距离变换是图像分割、前景提取的核心预处理技术能计算每个前景像素到最近背景像素的距离。本文以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-x2y1-y2计算速度快无开方运算cv.DIST_MASK_33×3 掩码尺寸掩码越大距离计算越精准但速度稍慢常用 3/5/7cv.NORM_MINMAX最值归一化将距离值缩放到[0,1]消除不同图像距离值范围差异2. 核心逻辑与避坑点输入要求距离变换仅支持单通道二值图非 0 为前景0 为背景需先完成灰度 二值化预处理否则报错归一化必要性距离变换输出的原始值范围与图像尺寸相关如 500×500 图像最大距离约 500归一化后可统一到[0,1]既便于显示也利于后续阈值筛选显示转换归一化后的float32类型值0~1需 ×255 转为uint80~255否则 OpenCV 无法正确显示会被识别为 0 值全黑。3. 常见距离类型对比距离类型计算方式特点DIST_L1曼哈顿$x1-x2y1-y2$速度最快无浮点运算DIST_L2欧氏(x1−x2)2(y1−y2)2​精度最高符合人眼距离感知DIST_C切比雪夫$max(x1-x2,y1-y2)$适用于棋盘格距离计算场景总结距离变换核心是cv.distanceTransform()输入必须为单通道二值图DIST_L1是速度优先的选择归一化cv.normalize是距离变换后必做步骤可统一数值范围、便于可视化显示时需将归一化后的float32值 ×255 转为uint8否则无法正常展示结果。