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

如何使用OpenCV仅检测图像中填充区域的轮廓

基于OpenCV检测指定颜色填充区域轮廓的实现方案

输入示例图像:
输入示例图像

你需要检测的是固定蓝色的填充区域,通过颜色阈值分割+轮廓提取的方案即可实现,无需额外的边缘检测处理,实现逻辑如下:

实现步骤

  • 色彩空间转换:将OpenCV默认读取的BGR格式图像转换为HSV格式,HSV空间对单一颜色的分割效果更稳定
  • 生成目标区域掩码:配置蓝色对应的HSV阈值范围,用inRange接口输出仅保留蓝色填充区域的二值掩码
  • 掩码降噪:对二值掩码做开运算,去除散点噪声,避免提取到无效的小轮廓
  • 轮廓提取:调用findContours接口提取掩码中的外轮廓
  • 结果绘制:将提取到的轮廓绘制到原图上输出

完整可运行代码

import cv2
import numpy as np

# 读取本地输入图像
img = cv2.imread("your_input_image_path.png")
# BGR转HSV色彩空间
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 蓝色对应的HSV阈值范围,可根据实际图像的色彩偏差微调
lower_blue = np.array([95, 40, 40])
upper_blue = np.array([135, 255, 255])

# 生成蓝色区域二值掩码,蓝色区域为白色,其余区域为黑色
blue_mask = cv2.inRange(hsv_img, lower_blue, upper_blue)

# 开运算去除掩码中的小噪点
kernel = np.ones((3, 3), np.uint8)
processed_mask = cv2.morphologyEx(blue_mask, cv2.MORPH_OPEN, kernel, iterations=1)

# 提取掩码的外轮廓,仅保留轮廓关键点降低内存占用
contours, _ = cv2.findContours(processed_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 可选:过滤面积过小的误检轮廓
min_area = 100
valid_contours = [cnt for cnt in contours if cv2.contourArea(cnt) > min_area]

# 在原图上绘制轮廓,红色、线宽2
cv2.drawContours(img, valid_contours, -1, (0, 0, 255), 2)

# 展示和保存结果
cv2.imshow("detection result", img)
cv2.imwrite("contour_result.png", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

常见调整项

  • 出现蓝色区域漏检时,适当放宽lower_blue的下限或者upper_blue的上限
  • 出现非目标区域误检时,增大形态学运算的核尺寸,或者调高轮廓过滤的最小面积阈值min_area

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:15:02