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

Python图像角点检测优化:仅识别指定贴纸角点以提速

解决方案

核心思路

只检测4个红色叉号标记的角点,通过计算网格间距批量推导所有贴纸坐标,彻底替代原代码26-28行的重复检测逻辑,大幅提升处理速度。


具体实现步骤

1. 快速定位4个红色叉号角点

利用颜色过滤+轮廓检测,精准提取红叉并按坐标排序,拿到前4个目标点后立即停止检测:

import cv2
import numpy as np

# 读取图像
img = cv2.imread("sticker_sheet.jpg")
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 提取红色区域(HSV双区间覆盖红色色域)
lower_red1 = np.array([0, 120, 70])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 120, 70])
upper_red2 = np.array([180, 255, 255])

red_mask = cv2.bitwise_or(
    cv2.inRange(hsv_img, lower_red1, upper_red1),
    cv2.inRange(hsv_img, lower_red2, upper_red2)
)

# 去除噪点,优化轮廓检测效果
kernel = np.ones((3, 3), np.uint8)
red_mask = cv2.morphologyEx(red_mask, cv2.MORPH_OPEN, kernel)

# 检测红叉轮廓并筛选有效目标
contours, _ = cv2.findContours(red_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
target_corners = []
for cnt in contours:
    area = cv2.contourArea(cnt)
    # 按红叉实际大小调整面积阈值,过滤噪点和干扰
    if 50 < area < 500:
        x, y, w, h = cv2.boundingRect(cnt)
        # 取轮廓中心作为角点坐标
        target_corners.append((x + w//2, y + h//2))

# 按「从上到下,从左到右」排序,确保前4个是指定的标记点
target_corners.sort(key=lambda p: (p[1], p[0]))
# 仅保留前4个目标角点
selected_corners = target_corners[:4]

2. 推导所有贴纸坐标

假设贴纸为规则网格排列(50张通常是5列×10行或10列×5行),通过4个标记点计算横向/纵向间距,批量生成所有贴纸的定位坐标:

# 假设前2个点是第一行左右角点,后2个是第二行左右角点
# 计算横向间距dx,纵向间距dy
dx = selected_corners[1][0] - selected_corners[0][0]
dy = selected_corners[2][1] - selected_corners[0][1]

# 根据实际贴纸数量设置行列数(示例为5列×10行=50张)
cols = 5
rows = 10

# 批量生成所有贴纸的左上角坐标(可根据你的裁剪逻辑调整为其他角点)
all_sticker_pos = []
for row in range(rows):
    for col in range(cols):
        x = selected_corners[0][0] + col * dx
        y = selected_corners[0][1] + row * dy
        all_sticker_pos.append((x, y))

3. 替换原检测逻辑

直接使用all_sticker_pos中的坐标进行贴纸裁剪和OCR,完全跳过原代码26-28行的重复角点检测步骤。


关键注意事项

  • HSV颜色范围调整:如果红叉提取不准确,用cv2调试工具(如cv2.createTrackbar)微调红色的HSV阈值。
  • 轮廓筛选优化:根据红叉的实际大小调整面积阈值,避免误检噪点或遗漏目标。
  • 网格验证:生成坐标后,可通过cv2.circle在原图上标记所有推导的点,确认是否与实际贴纸位置对齐。
  • 坐标适配:如果你的裁剪逻辑需要贴纸的四个角点而非单点,可基于推导的左上角坐标+贴纸尺寸(从标记点间距或原贴纸尺寸获取)生成完整裁剪框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:25:19