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

如何检测图像中黑白方框的轮廓?现有方案存在区域缺失问题

嘿,我来帮你搞定这个黑白方框检测的问题!你现在的需求是识别图像里方框的外部区域,但用HSV空间没法捕捉到黑白方框,换成HLS后虽然多识别了3个,但还是缺2个对吧?我来给你梳理下解决方案~

解决黑白方框区域检测的问题

首先得说,黑白颜色在HSV空间里确实不好精准定位——黑色的H、S值都偏低,白色的S值低、V值高,很容易和背景的浅色/深色区域混淆;而HLS的L通道是亮度维度,天生更适合区分黑白这类靠亮度区分的颜色,但你的阈值范围可能没覆盖到所有黑白(包括过渡的灰色)区域。

调整HLS阈值的具体方案

我们可以分别定义黑色和白色的HLS阈值,然后合并掩码,再反转得到方框外部区域:

import cv2
import numpy as np

img = cv2.imread("1.png")
# 转换为HLS色彩空间
img_hls = cv2.cvtColor(img, cv2.COLOR_BGR2HLS)

# 定义黑色的HLS阈值:覆盖纯黑到深灰区域
lower_black = np.array([0, 0, 0])
upper_black = np.array([180, 255, 60])
# 定义白色的HLS阈值:覆盖纯白到浅灰区域
lower_white = np.array([0, 190, 0])
upper_white = np.array([180, 255, 255])

# 生成黑白区域的掩码
mask_black = cv2.inRange(img_hls, lower_black, upper_black)
mask_white = cv2.inRange(img_hls, lower_white, upper_white)
# 合并两个掩码,得到所有黑白方框区域
mask = cv2.bitwise_or(mask_black, mask_white)

# 反转掩码:得到我们需要的方框外部区域
mask_inv = cv2.bitwise_not(mask)

# 提取外部区域
result = cv2.bitwise_and(img, img, mask=mask_inv)

cv2.imwrite("final_result.png", result)

额外优化小技巧

如果调整阈值后还是有遗漏,可以试试这些操作:

  • 高斯模糊降噪:先对原图做cv2.GaussianBlur(img, (5,5), 0),减少图像里的细碎噪声,让黑白方框的边缘更连贯
  • 形态学补漏:用膨胀操作cv2.dilate(mask, np.ones((3,3), np.uint8), iterations=1)填补掩码里的小漏洞,让黑白区域的掩码更完整
  • 亮度均衡:如果图像有光照不均的情况,可以单独对HLS的L通道做直方图均衡化,提升黑白区域和背景的对比度

为什么之前的HLS方案还有遗漏?

大概率是你之前设置的HLS阈值范围太窄了——有些边框是浅灰或者深灰,它们的L值不在你原来的阈值区间里,所以把黑色的上限L值调高一点,白色的下限L值调低一点,就能覆盖到这些过渡的灰色区域啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:31:17