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

无法用OpenCV生成清晰图像二值掩码的技术求助

解决OpenCV生成二值掩码不符合预期的问题

你的输入图像是深色背景搭配浅色文字,原代码用的cv2.THRESH_BINARY会把背景变成白色、文字变成黑色,和期望结果刚好相反,再加上块大小和C值设置不合适,导致掩码噪声多、文字边缘不清晰。

输入图像

Input Image

原代码实际输出

实际输出图像

期望输出

期望输出图像

修改后的代码

import cv2

def create_adaptive_binary_mask(image_path):
    # 读取灰度图像
    img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
    
    # 高斯模糊降噪,减少文字边缘噪声
    blurred = cv2.GaussianBlur(img, (5, 5), 0)
    
    # 调整自适应阈值参数:改用反二值阈值,增大块大小和C值
    binary_mask = cv2.adaptiveThreshold(
        blurred, 
        255, 
        cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
        cv2.THRESH_BINARY_INV,  # 反二值,让浅色文字变成白色
        151,  # 块大小,必须是奇数,适配大区域背景
        10    # C值,阈值偏移量,增大后减少噪声
    )
    
    # 可选:形态学闭运算,填补文字内部小空洞
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
    binary_mask = cv2.morphologyEx(binary_mask, cv2.MORPH_CLOSE, kernel)
    
    # 显示结果
    cv2.imshow('Adjusted Binary Mask', binary_mask)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

create_adaptive_binary_mask('1.jpg')

关键修改点说明

  • 阈值类型切换:cv2.THRESH_BINARY_INV实现了背景黑、目标白的效果,和你的期望匹配。
  • 块大小调整:从11改成151,更大的块能更好地处理图像中大面积的背景明暗差异,避免局部噪声干扰。
  • C值调整:从2提升到10,降低了阈值的偏移幅度,减少了背景中的白色噪点。
  • 高斯模糊:预处理模糊能平滑文字边缘的细碎噪声,让生成的掩码更干净。
  • 形态学闭运算:可选步骤,用来填补文字内部的小空洞,让掩码的文字区域更完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:37:09