• Python,图像处理,骨架线,中轴线


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 2301_77755930 2024-04-24 21:13 采纳率: 54.5% 浏览 0 首页/ 编程语言 / Python,图像处理,骨架线,中轴线 python 利用Python对以上二值图中白色纤维目标进行绘制中轴线,首先对白色纤维目标进行轮廓细化,提取骨架,同时对骨架进行去毛刺处理,然后把骨架线绘制到原图白色纤维目标内部,形成白色纤维目标轮廓内部中间有一条黑色中轴线。 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    1条回答 默认 最新

    • 码农阿豪 Java领域优质创作者 2024-04-24 21:21
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      问题分析: 要解决这个问题,需要以下步骤:
      1. 对白色纤维目标进行轮廓细化,提取骨架;
      2. 对骨架进行去毛刺处理;
      3. 把骨架线绘制到原图白色纤维目标内部,形成白色纤维目标轮廓内部中间有一条黑色中轴线。 解决方案:
      4. 对白色纤维目标进行轮廓细化,提取骨架 通过OpenCV库的函数cv2.threshold()将原始图像变成二值图像,然后使用cv2.ximgproc.thinning()函数将图像进行轮廓细化,提取出骨架。 代码示例:
      import cv2
      # 读取图像
      img = cv2.imread('image.png')
      # 灰度化
      gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
      # 二值化
      _,thresh = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY_INV)
      # 轮廓细化
      thinning = cv2.ximgproc.thinning(thresh)
      
      1. 对骨架进行去毛刺处理 对于得到的骨架图像,可以使用形态学处理来进行去噪和去毛刺处理,这里采用开运算来实现。 代码示例:
      # 定义卷积核
      kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
      # 开运算去噪
      opening = cv2.morphologyEx(thinning, cv2.MORPH_OPEN, kernel)
      
      1. 绘制中轴线 通过OpenCV库的函数cv2.findContours()获取骨架的轮廓信息,然后使用cv2.drawContours()函数将骨架绘制到原图白色纤维目标内部,并将颜色设为黑色。 代码示例:
      # 查找轮廓
      contours,_ = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
      # 绘制轮廓
      img_contours = cv2.drawContours(img, contours, -1, (0,0,0), 2)
      

      完整代码:

      import cv2
      # 读取图像
      img = cv2.imread('image.png')
      # 灰度化
      gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
      # 二值化
      _,thresh = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY_INV)
      # 轮廓细化
      thinning = cv2.ximgproc.thinning(thresh)
      # 定义卷积核
      kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
      # 开运算去噪
      opening = cv2.morphologyEx(thinning, cv2.MORPH_OPEN, kernel)
      # 查找轮廓
      contours,_ = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
      # 绘制轮廓
      img_contours = cv2.drawContours(img, contours, -1, (0,0,0), 2)
      # 显示结果
      cv2.imshow('result', img_contours)
      cv2.waitKey(0)
      cv2.destroyAllWindows()
      

      运行截图:

      展开全部

      评论
      编辑
      预览

      报告相同问题?

    • 相关阅读:
      【第八章 IDEA中常用快捷键】
      Superset (三) --------- Superset 使用
      Linux 搭建K8s集群,最新教程,细到极致
      【Elasticsearch】Elasticsearch命令行操作
      【Vue-Element-Admin】dialog关闭回调事件
      记nrm管理仓库以及发布npm包
      Swift基础
      问题汇总20231117
      java计算机毕业设计基于安卓/微信小程序的健身房健身管理系统
      深入解析 MySQL binlog
    • 原文地址:https://ask.csdn.net/questions/8094387