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

使用OpenCV替换图像两种背景色为黑色并优化文字显示

解决方案

问题分析

你之前的代码仅通过bitwise_and保留了掩码内的区域,但未将文字转为纯白色,且颜色范围定义不准确,导致背景未完全变为黑色。

修正后的代码

import cv2
import numpy as np

# 读取目标图像
image = cv2.imread("image1.png")

# 转换为HSV色彩空间,更易区分绿色与灰色背景
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 定义绿色的HSV范围(可根据实际图像微调)
lower_green = np.array([35, 40, 40])
upper_green = np.array([85, 255, 255])
# 定义灰色的HSV范围(低饱和度、亮度适中)
lower_gray = np.array([0, 0, 50])
upper_gray = np.array([180, 50, 200])

# 分别生成绿色、灰色背景的掩码
mask_green = cv2.inRange(hsv, lower_green, upper_green)
mask_gray = cv2.inRange(hsv, lower_gray, upper_gray)
# 合并背景掩码
mask_background = cv2.bitwise_or(mask_green, mask_gray)

# 创建全黑的结果图像
result = np.zeros_like(image)
# 生成文字区域掩码(背景掩码取反)
mask_text = cv2.bitwise_not(mask_background)

# 可选:形态学闭运算,消除文字边缘模糊
kernel = np.ones((2, 2), np.uint8)
mask_text = cv2.morphologyEx(mask_text, cv2.MORPH_CLOSE, kernel)

# 将文字区域设为纯白色
result[mask_text > 0] = [255, 255, 255]

# 保存结果
cv2.imwrite("processed_image.png", result)
# 显示结果
cv2.imshow("Processed Image", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码说明

  1. HSV空间处理:相比BGR,HSV能更精准区分绿色(通过H通道范围)和灰色(通过低S通道)。
  2. 掩码合并:将绿色和灰色背景的掩码合并,一次性定位所有需要转为黑色的区域。
  3. 文字区域处理:对背景掩码取反得到文字区域,直接将该区域设为纯白色。
  4. 形态学操作:可选的闭运算可以消除文字边缘的模糊感,让文字更锐利。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:01:11