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

基于OpenCV色彩滤镜精准检测GPR彩色矩形像素长度的技术求助

解决方案

你的问题核心是红色在HSV色彩空间中是跨0°的单色调,只设置一个区间会漏掉偏深红的色块,再加上图像本身的噪声干扰,导致检测不完整。以下是精准检测彩色矩形并输出长度的完整方案:

1. 修复红色HSV检测区间

红色的HSV范围分为两部分:[0, 50, 50]~[10, 255, 255](亮红)和[170, 50, 50]~[180, 255, 255](深红),需要合并这两个区间的掩码才能覆盖所有红色区域。

2. 图像预处理降噪

先对图像做高斯模糊,减少细小噪声点对掩码的干扰,避免后续轮廓检测出现冗余小框。

3. 形态学操作优化掩码

用膨胀+腐蚀的组合(闭运算)填补掩码中的小缺口,让红色区域的掩码更完整连续。

4. 轮廓检测与矩形长度计算

通过轮廓检测找到每个红色矩形的外接边界框,计算其像素长度(根据矩形的宽高判断是横向还是纵向,取对应值)。

5. 导出结果到Excel

用pandas将检测结果(颜色、矩形坐标、像素长度)写入Excel文件,方便后续处理。

完整代码实现

import cv2
import numpy as np
import pandas as pd

# 加载图像
image = cv2.imread('Image15.jpg')
# 预处理:高斯模糊降噪
blurred = cv2.GaussianBlur(image, (5, 5), 0)
# 转换为HSV色彩空间
hsv = cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV)

# 定义红色的两个HSV区间
lower_red1 = np.array([0, 50, 50])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 50, 50])
upper_red2 = np.array([180, 255, 255])

# 生成两个掩码并合并
mask1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask = cv2.bitwise_or(mask1, mask2)

# 形态学闭运算:先膨胀再腐蚀,填补掩码缺口
kernel = np.ones((3, 3), np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

# 寻找轮廓
contours, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 存储检测结果
results = []
for cnt in contours:
    # 过滤过小的轮廓(排除噪声点)
    if cv2.contourArea(cnt) < 50:
        continue
    # 获取外接矩形
    x, y, w, h = cv2.boundingRect(cnt)
    # 判断矩形方向,取长度(假设横向矩形取宽度w,纵向取高度h,可根据实际调整)
    length = w if w > h else h
    # 记录结果
    results.append({
        "颜色": "红色",
        "矩形左上角坐标": (x, y),
        "矩形宽度": w,
        "矩形高度": h,
        "像素长度": length
    })
    # 在原图上绘制边界框(可选,用于可视化验证)
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

# 可视化结果(可选)
cv2.imshow('检测结果', image)
cv2.imshow('优化后掩码', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 导出结果到Excel
df = pd.DataFrame(results)
df.to_excel('红色矩形检测结果.xlsx', index=False)
print("结果已导出到红色矩形检测结果.xlsx")

其他颜色检测的适配方法

对于其他颜色(如蓝色、绿色),可以通过以下方式获取精准HSV区间:

  • 用取色工具(如OpenCV的cv2.setMouseCallback)拾取图像中目标颜色的HSV值;
  • 调整上下限范围,确保覆盖目标颜色的深浅变化;
  • 同样可以加入预处理和形态学操作优化检测效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:28:23