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

如何对阈值分割图像做平滑细化处理以用于点云计算

优化实现方案

你可以按照以下步骤修改代码,即可得到更平滑纤细、精度更高的分割结果:

  • 第一步:预处理添加高斯模糊,去除原始图像的随机噪点,避免分割结果出现毛刺
  • 第二步:替换固定阈值为自适应局部阈值,适配光切图像可能存在的局部光照不均问题,分割精度更高
  • 第三步:添加形态学开运算,去除分割结果中的小面积噪点
  • 第四步:使用图像细化(骨架提取)算法,将分割得到的粗线条压缩为单像素宽度的纤细线条,完全适配后续点云计算的需求
  • 第五步:修改输出格式为无损PNG,避免JPG有损压缩导致的线条边缘变形、精度损失

优化后代码

import cv2
import numpy as np
import os

# 路径配置
input_path = r'C:\Users\MERYEM\Desktop\scan\Chosen'
output_path = r'C:\Users\MERYEM\Desktop\scan\threshold_images'
os.makedirs(output_path, exist_ok=True)

file_count = len(os.listdir(input_path))

for i in range(1, file_count+1):
    # 读取图像转灰度
    img = cv2.imread(os.path.join(input_path, f"{i}.jpg"))
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # 1. 高斯模糊去噪
    blur = cv2.GaussianBlur(gray, (3,3), 0)
    
    # 2. 自适应阈值分割
    thresh = cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                                  cv2.THRESH_BINARY, 11, 2)
    
    # 3. 开运算去除小噪点
    kernel = np.ones((2,2), np.uint8)
    clean_thresh = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)
    
    # 4. 细化提取骨架,得到纤细平滑的线条
    # 注意:需要先安装opencv-contrib-python才能使用thinning接口
    thin_line = cv2.ximgproc.thinning(clean_thresh, thinningType=cv2.ximgproc.THINNING_ZHANGSUEN)
    
    # 5. 保存为无损PNG
    save_res = cv2.imwrite(os.path.join(output_path, f"{i}.png"), thin_line)
    print(f"第{i}张文件保存成功" if save_res else f"第{i}张文件保存失败")

cv2.destroyAllWindows()

额外说明

如果运行时提示找不到ximgproc模块,执行pip install opencv-contrib-python安装扩展包即可。如果对线条粗细有调整需求,可以修改形态学 kernel 的大小,或者在细化前先执行1-2次腐蚀操作即可。


内容的提问来源于stack exchange,提问作者Meryem Çiftçi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:48:04