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

如何获取特定形状/坐标范围的像素值及标记椭圆ROI实现行人检测?

椭圆ROI内行人检测实现方案

一、高效标记椭圆ROI的方法

不用遍历所有像素,直接通过掩码(mask)快速定位椭圆ROI是最优方案,以OpenCV为例:

  • 创建与原图尺寸一致的黑色掩码,用cv2.ellipse()在掩码上绘制白色填充的椭圆区域
  • 通过位运算提取ROI范围内的图像

示例代码:

import cv2
import numpy as np

# 读取原图,替换为你的图像路径
img = cv2.imread("input_image.jpg")
# 初始化全黑掩码
mask = np.zeros_like(img)
# 椭圆参数:中心坐标(x,y)、长短半轴(a,b)、旋转角度、起始/终止角度
ellipse_params = ((300, 200), (150, 100), 0, 0, 360)
# 在掩码上绘制白色填充椭圆
cv2.ellipse(mask, *ellipse_params, (255, 255, 255), thickness=-1)
# 提取ROI区域图像
roi_img = cv2.bitwise_and(img, mask)

二、ROI内行人检测的过滤逻辑

无需对比像素值,直接通过几何判断过滤行人检测结果即可:

  1. 用YOLO、HOG+SVM等模型检测全图行人,得到每个行人的边界框(x1, y1, x2, y2)
  2. 判断行人边界框是否与椭圆ROI关联:
    • 简单方案:判断边界框中心是否在椭圆内
    • 精准方案:判断边界框与椭圆是否存在交集
  3. 仅保留符合条件的行人结果触发告警

判断点是否在椭圆内的实现代码

def is_point_in_ellipse(px, py, ellipse_center, axes, angle):
    h, k = ellipse_center
    a, b = axes
    angle_rad = np.deg2rad(angle)
    
    # 将点平移至椭圆中心为原点的坐标系
    tx = px - h
    ty = py - k
    # 旋转坐标抵消椭圆的旋转角度
    rx = tx * np.cos(angle_rad) + ty * np.sin(angle_rad)
    ry = -tx * np.sin(angle_rad) + ty * np.cos(angle_rad)
    
    # 椭圆方程判断
    return (rx / a) ** 2 + (ry / b) ** 2 <= 1.0

# 假设检测到的行人边界框为(x1, y1, x2, y2)
box_center = ((x1 + x2) // 2, (y1 + y2) // 2)
# 代入椭圆参数判断
if is_point_in_ellipse(box_center[0], box_center[1], (300,200), (150,100), 0):
    # 执行告警逻辑
    print("行人进入ROI区域,触发告警")

三、不推荐像素值对比的原因

  • 像素遍历效率极低,高分辨率图像下会占用大量计算资源,实时性差
  • 像素重叠判断本质还是区域交集逻辑,几何方法比像素对比更高效、准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:54:14