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

如何为图像彩色高亮区域创建掩码并精准检测多色区域

解决方案

你的问题在于原代码仅针对粉红和红色设定了颜色范围,未覆盖黄色等其他彩色高亮区域。要检测所有彩色高亮且不遗漏粉红、黄色等区域,可以通过基于饱和度的掩码提取实现——彩色高亮区域的饱和度远高于白色背景,利用这一点能一次性覆盖所有彩色高亮。

具体步骤:

  • 将图像转换到HSV色彩空间,重点利用S通道(饱和度)区分彩色与背景
  • 设定饱和度阈值,提取所有高饱和度区域作为初始掩码
  • 通过形态学操作(膨胀+腐蚀)优化掩码,消除噪声并填补高亮区域的空隙
  • 用优化后的掩码提取最终的高亮区域

修改后的代码:

import cv2
import numpy as np

def detect_highlighted_text(image_path):
    # 读取图像
    image = cv2.imread(image_path)
    # 转换到HSV空间
    hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    # 分离饱和度通道
    s_channel = hsv_image[:, :, 1]
    
    # 设定饱和度阈值,提取高饱和度区域(彩色高亮)
    _, saturation_mask = cv2.threshold(s_channel, 40, 255, cv2.THRESH_BINARY)
    
    # 形态学操作:先膨胀填补空隙,再腐蚀去除噪声
    kernel = np.ones((3, 3), np.uint8)
    saturation_mask = cv2.dilate(saturation_mask, kernel, iterations=1)
    saturation_mask = cv2.erode(saturation_mask, kernel, iterations=1)
    
    # 提取高亮区域
    highlighted_text = cv2.bitwise_and(image, image, mask=saturation_mask)
    
    cv2.imshow("Highlighted Text", highlighted_text)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

detect_highlighted_text("path/to/your/image.jpg")

代码说明:

  • 饱和度阈值设为40是针对你的输入图像调整的,可根据实际图像微调(值越小会包含更多低饱和区域,值越大则只保留高饱和彩色)
  • 形态学操作的核大小和迭代次数也可根据图像噪声情况调整,目的是让高亮区域更完整、噪声更少

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:55:15