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

如何在检测到的Logo周围绘制矩形?OpenCV代码实现求助

解决Logo检测并绘制矩形的方案

你的代码目前有两个关键问题:一是自适应阈值的API用错了(应该用cv2.adaptiveThreshold而非cv2.threshold),二是缺少轮廓检测的步骤——要先找到Logo的轮廓,才能在它周围画矩形。下面是修正后的完整方案:

修正后的代码

import cv2
import matplotlib.pyplot as plt

# 1. 读取图像并预处理
img = cv2.imread('9.png')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 转RGB用于matplotlib显示
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)     # 转灰度图
blur = cv2.GaussianBlur(gray, (3, 3), 0)         # 灰度图做高斯模糊,避免彩色通道干扰

# 2. 正确生成二值图(自适应阈值)
binary = cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                               cv2.THRESH_BINARY_INV, 11, 2)  # 用INV让Logo区域为白色

# 3. 查找轮廓并筛选目标Logo
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 遍历轮廓,筛选面积符合Logo大小的(可根据实际情况调整阈值)
for cnt in contours:
    area = cv2.contourArea(cnt)
    if 500 < area < 5000:  # 假设Logo面积在这个区间,可自行调整
        # 获取轮廓的外接矩形
        x, y, w, h = cv2.boundingRect(cnt)
        # 在RGB图上绘制红色矩形((0,0,255)对应RGB的红色)
        cv2.rectangle(img_rgb, (x, y), (x+w, y+h), (0, 0, 255), 2)

# 4. 显示结果
plt.imshow(img_rgb)
plt.axis('off')  # 隐藏坐标轴
plt.show()

关键说明

  • 预处理阶段:必须用灰度图做模糊和阈值,彩色图会引入不必要的通道干扰,导致二值图效果差。
  • 自适应阈值:cv2.adaptiveThreshold的参数要对应正确,用THRESH_BINARY_INV可以让深色的Logo变成白色区域,更易检测轮廓。
  • 轮廓筛选:通过面积过滤掉小噪点和大背景区域,你可以根据自己的Logo实际大小调整500 < area < 5000这个范围。
  • 绘制矩形:cv2.rectangle的最后一个参数是线条粗细,这里设为2,可按需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:05:17