行人越界检测 越线 越界区域 多边形IOU越界判断

行人越界判断

越界判断方式:(1)bbox中心点越界(或自定义)(2)交并比IoU判断

越界类型:(1)越线 (2)越界区域
1.越线判断

bbox中心点xc、yc判断是否越线

复制代码
import cv2
def is_passing_line(point, polyline):  # 在直线上方,status =1   下方,status =-1 
	status = 1   
	poly_y = ((polyline[1][1] - polyline[0][1]) * (point[0] - polyline[0][0])) / (polyline[1][0] - polyline[0][0]) +  polyline[0][1] # 点映射在直线的高度
	if point[1] > poly_y:
		status = -1
	return status
	
pt = [xc,yc]
lines = [[x1,y1],[x2,y2]]
cv2.line(img,(x1,y1),(x2,y2),(255,0,0),2)
cv2.circle(img, pt, 4, (0,0,255), -1)	
status = is_passing_line(pt,lines)
cv2.imwrite('color_line.jpg',img)
print('status up 1 down -1:',status)

2.越界判断

bbox中心点xc、yc判断是否在多边形区域内

复制代码
import cv2
import numpy as np
import matplotlib.path as mplPath

pt=[1067,382] #bbox 中心点xc,yc
POLYGON = np.array([[870, 163],[1022, 180],[1060, 415],[954, 713],[727, 658],])
imgpath = 'demo.jpg'
img = cv2.imread(imgpath)
cv2.polylines(img, [POLYGON], True, (144, 238, 144), 2)
cv2.circle(img, pt, 4, (0,0,255), -1)
is_in = mplPath.Path(POLYGON).contains_point(pt)
cv2.imwrite('color.jpg',img)
print('is_in:',is_in) # True即在多边形区域内

3.矩形IoU越界判断

二者皆为矩形

复制代码
def iou(box1, box2):                                           
    '''                                                        
    box: [ 0,  1,  2,  3]                                      
    box: [x1, y1, x2, y2],依次为左上右下坐标                  
    '''                                                        
    w = max(0, min(box1[2], box2[2]) - max(box1[0], box2[0]))  
    h = max(0, min(box1[3], box2[3]) - max(box1[1], box2[1]))  
    Inter = w * h                                              
    S_box1 = (box1[2]-box1[0]) * (box1[3]-box1[1])             
    S_box2 = (box2[2]-box2[0]) * (box2[3]-box2[1])             
    Union = S_box1 + S_box2 - Inter                            
    iou = Inter / Union                                        
    return iou                                                 
box1 = [100, 100, 200, 200]                                    
box2 = [100, 150, 200, 250]                                    
IoU = iou(box1, box2)                                          
print(IoU)

4.多边形IoU越界判断

支持任意多边形二者之间IoU计算

复制代码
from shapely.geometry import Polygon                               
                                                                                  
poly1 = [(100, 100),(50,150), (100, 200), (200, 200), (200, 100)]   #逆时针顶点坐标
poly2 = [(100, 150), (100, 250), (200, 250), (200, 150)]           
                                                                   
# 创建多边形                                                       
poly1 = Polygon(poly1)                                             
poly2 = Polygon(poly2)                                             
                                                                   
# 计算交集和并集                                                   
intersection = poly1.intersection(poly2)                           
union = poly1.union(poly2)                                         
                                                                   
# 计算IoU                                                          
iou = intersection.area / union.area                               
print(f"IoU: {iou}") 
相关推荐
weixin_4462608525 分钟前
应用实战篇:利用 DeepSeek V4 构建生产级 AI 应用的全流程与最佳实践
大数据·linux·人工智能
AI科技星27 分钟前
全域数学视角下N维广义数系的推广与本源恒等式构建【乖乖数学】
人工智能·机器学习·数学建模·数据挖掘
qcx2328 分钟前
拆解 Warp AI Agent(二):风险分级执行——Agent 如何做到安全并行、危险排队
人工智能·安全·ai·agent·源码解析·warp
小白蒋博客29 分钟前
【ai开发段永平投资理财的知识图谱网站】第一天:搭 Vite + Vue 项目,跑通 Hello World
vue.js·人工智能·trae
MediaTea30 分钟前
人工智能通识课:Scikit-learn 机器学习工具库
人工智能·python·机器学习·scikit-learn
AI木马人32 分钟前
13.人工智能实战:RAG 多轮对话越问越偏?Query Rewrite、历史压缩与会话记忆的工程化方案
人工智能·搜索引擎
郝学胜-神的一滴35 分钟前
二分类任务核心:BCE 损失函数从原理到 PyTorch 实战
人工智能·pytorch·python·算法·机器学习·分类·数据挖掘
.柒宇.38 分钟前
AI掘金头条项目 Docker Compose 部署完整教程(附踩坑记录)
运维·后端·python·docker·容器·fastapi
财经资讯数据_灵砚智能39 分钟前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月2日
人工智能·python·信息可视化·自然语言处理·ai编程
sali-tec39 分钟前
C# 基于OpenCv的视觉工作流-章58-相机标定
图像处理·人工智能·数码相机·opencv·算法·计算机视觉