You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python仅对图像中的粗线条应用腐蚀(Erosion)操作

解决方案:仅对粗线条应用腐蚀操作

要实现只腐蚀粗线条、保留细线条的效果,核心思路是先分离出细线条,单独处理粗线条后再合并回去,具体步骤如下:

  • 提取细线条:用小尺寸结构元素做开运算,开运算会移除细线条,再用原图减去开运算结果,就能得到纯细线条区域
  • 分离粗线条:用原图减去细线条,得到仅包含粗线条的图像
  • 腐蚀粗线条:对粗线条图像执行腐蚀操作
  • 合并结果:将腐蚀后的粗线条和保留的细线条相加,得到最终图像

完整代码实现:

import cv2
import numpy as np

# 读取灰度图像
img = cv2.imread('123.png', 0)
# 自适应二值化,确保线条为白色、背景为黑色,可根据实际图像调整阈值
_, binary_img = cv2.threshold(
    img, 
    127, 
    255, 
    cv2.THRESH_BINARY_INV if np.mean(img) > 127 else cv2.THRESH_BINARY
)

# 步骤1:提取细线条
small_kernel = np.ones((2, 2), np.uint8)
opened = cv2.morphologyEx(binary_img, cv2.MORPH_OPEN, small_kernel)
thin_lines = cv2.subtract(binary_img, opened)

# 步骤2:分离粗线条
thick_lines = cv2.subtract(binary_img, thin_lines)

# 步骤3:腐蚀粗线条(沿用你原有的核参数)
erosion_kernel = np.ones((6, 6), np.uint8)
eroded_thick = cv2.erode(thick_lines, erosion_kernel, iterations=1)

# 步骤4:合并细线条与腐蚀后的粗线条
result = cv2.add(thin_lines, eroded_thick)

# 展示结果
cv2.imshow("Original", binary_img)
cv2.imshow("Result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

关键说明:

  1. 二值化适配:自动判断背景明暗来选择二值化模式,避免线条和背景颠倒的问题,你可以根据自己的图像调整阈值参数
  2. 细线条提取:(2,2)的小核刚好能过滤掉细线条,若你的细线条更粗/更细,可微调核的尺寸
  3. 腐蚀参数:保留了你原有的(6,6)核和迭代次数,可根据粗线条需要腐蚀的程度自行调整

内容的提问来源于stack exchange,提问作者Nivetha Rajendran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:35:16