传媒网站给行业做宣传,国家高新技术企业难吗,校园网站建设的维护,几分钟做网站行人越界判断 越界判断方式#xff1a;#xff08;1#xff09;bbox中心点越界#xff08;或自定义#xff09;#xff08;2#xff09;交并比IoU判断 越界类型#xff1a;#xff08;1#xff09;越线 #xff08;2#xff09;越界区域 1.越线判断 bbox中心点xc、…行人越界判断 越界判断方式1bbox中心点越界或自定义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 -1return statuspt [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 mplPathpt[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(fIoU: {iou})