不使用OpenCV提取图像mask的问题咨询及通用方法求荐
你当前代码失效的核心原因是使用了固定的0.8灰度阈值,仅能适配前景背景灰度差异完全符合预设的特定场景,无法覆盖灰度分布不固定的各类图像。
改进后的可自动计算阈值的实现方案
import numpy as np import skimage.color import skimage.filters import skimage.io filename = 'pathToImage' image = skimage.io.imread(fname=filename) # 灰度转换+高斯模糊逻辑保持不变 gray = skimage.color.rgb2gray(image) blur = skimage.filters.gaussian(gray, sigma=2) # 替换固定阈值为大津法自动计算最优全局阈值,无需手动设置参数 threshold = skimage.filters.threshold_otsu(blur) mask = blur < threshold # 生成带白色背景的前景提取结果,匹配预期的mask效果 sel = np.full_like(image, fill_value=255) sel[mask] = image[mask] # 可视化/保存结果 skimage.io.imshow(sel) skimage.io.imsave('extracted_mask.png', mask.astype(np.uint8) * 255)
无需自定义调参的通用mask提取方法
如果需要适配不同场景的主体mask提取,不需要手动调整任何参数,可以使用显著目标检测的预训练方案,这类方案专门用于自动识别图像中的核心主体区域,常规的自然图像、产品图像都可以直接适配。常用的轻量实现如U2Net,仅需加载预训练权重即可直接输出符合要求的mask,全程不需要手动调整阈值、滤波参数等配置。
内容的提问来源于stack exchange,提问作者azal
相关产品推荐
相关产品推荐

