opencv-python 分离边缘粘连的物体(距离变换)




python 复制代码
import cv2
import numpy as np

# 读取图像,这里添加了判断图像是否读取成功的逻辑
img = cv2.imread("./640.png")
# 灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 高斯模糊
gray = cv2.GaussianBlur(gray, (5, 5), 0)
# 二值化
ret, binary = cv2.threshold(gray, 115, 255, cv2.THRESH_BINARY)
kernel = np.ones((5, 5), np.uint8)
# 开运算
binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=1)

cv2.imshow('thres', binary)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 距离变换
dist = cv2.distanceTransform(binary, cv2.DIST_L2, 3)
# 对二值图像进行距离变换操作,使用cv2.distanceTransform函数,计算图像中每个非零像素到最近的零像素的距离,
# 参数cv2.DIST_L2表示使用欧几里得距离(也可以选择其他距离度量方式),参数3表示距离变换的掩码大小,
# 得到的dist结果是一个单通道图像,其像素值表示对应的距离信息,该操作常用于图像分割等场景中,帮助区分不同区域的边界等。

dist_out = cv2.normalize(dist, 0, 1.0, cv2.NORM_MINMAX)
# 对距离变换得到的图像进行归一化处理,使用cv2.normalize函数,将像素值归一化到0到1.0的范围,
# 方便后续基于归一化后的距离值进行阈值处理等操作,采用cv2.NORM_MINMAX归一化类型,表示将最小值映射到0,最大值映射到1.0。

cv2.imshow('distance-Transform', dist_out*100)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 显示归一化后的距离变换图像,为了更直观地查看距离信息,将归一化后的图像像素值乘以100进行放大显示(只是为了视觉效果更好,

ret, surface = cv2.threshold(dist_out, (0.35 * dist_out.max()), 255, cv2.THRESH_BINARY)
# 对归一化后的距离变换图像进行阈值处理,确定图像中的前景区域,这里使用cv2.threshold函数,
# 注意阈值参数的计算,先通过(0.35 * dist_out.max())计算出具体的阈值数值(原代码此处计算方式有误,需先算出具体值再传入函数),
# 大于该阈值的像素设置为255(白色),表示属于前景区域,小于等于该阈值的像素设置为0(黑色),处理后的图像surface表示初步确定的前景区域。

print(surface)
cv2.imshow('123', surface)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 乘回来、转格式、
img_1 = (surface*255).astype(np.uint8)
# 轮廓查询
# print(cv2.RETR_LIST, cv2.RETR_EXTERNAL, cv2.RETR_CCOMP, cv2.RETR_TREE)
contours, hierarchy = cv2.findContours(img_1, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

for cnt in contours:
    # 精准绘制轮廓
    cv2.drawContours(img, [cnt], -1, (0, 255, 0), 1)
    cv2.imshow('1', img)
cv2.waitKey(0)
相关推荐
yunceqing8 小时前
从Excel调度到TMS平台:物流软件开发避坑清单
大数据·前端·网络·人工智能·excel·推荐算法
垂钓的小鱼18 小时前
用 Codex + MCP 驱动 SolidWorks 全自动出图:从环境准备到验收的完整实操教程
人工智能
IT_陈寒8 小时前
Redis主从切换把我坑惨了,这份血泪史你最好看看
前端·人工智能·后端
霍格沃兹测试开发学社测试人社区8 小时前
Skills实战:从0到1写一个你自己的接口签名Skill
人工智能
前端不太难8 小时前
当 AI 接管 Workspace:鸿蒙 PC Agent 架构设计实践
人工智能·状态模式·harmonyos
小雨青年8 小时前
GitHub Copilot 上下文工程:让 AI 编程更接近真实项目
人工智能·github·copilot
KIO no way8 小时前
AI内容编排是什么_聊聊CSDN_AI数字营销背后的分发逻辑
android·人工智能
环球科讯8 小时前
广东省茂名市:普惠金融畅流通,建行助力商贸兴
大数据·人工智能
一切皆是因缘际会8 小时前
神经符号融合智能体
大数据·数据结构·人工智能·ai
武子康8 小时前
调查研究-173 MOSS-TTS 调查:开源 TTS 正在从“朗读器“走向声音生成系统
人工智能·ai·chatgpt·claude·tts·minimax