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

原代码实际输出

期望输出

修改后的代码
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
相关产品推荐
相关产品推荐

