python常见数据转换,图形变换
遍历去重加set去重
def list2heavy(new_arr):
end_list = []
# 去重
for i in new_arr:
appen = 1
for x in end_list:
if set(i) == set(x):
appen = 0
print(appen)
if appen:
end_list.append(i)
return end_list
遍历去重
def list2heavy(new_arr):
end_list = []
# 去重
for i in new_arr:
if i not in end_list:
end_list.append(i)
return end_list
四边形相交
def mat_inter(box1,box2):
x01, y01, x02, y02 = box1
x11,y11,x12,y12=box2
lx = abs((x01 + x02) / 2 - (x11 + x12) / 2)
ly = abs((y01 + y02) / 2 - (y11 + y12) / 2)
sax = abs(x01 - x02)
sbx = abs(x11 - x12)
say = abs(y01 - y02)
sby = abs(y11 - y12)
if lx <= (sax + sbx) / 2 and ly <= (say + sby) / 2:
return True
else:
return False
坐标转换
def xyxy2xywh(x):
# Convert nx4 boxes from
# [x1, y1, x2, y2] to [x, y, w, h]
# where xy1=top-left, xy2=bottom-right**
y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x)
y[ 0] = (x[ 0] + x[ 2]) / 2 # x center
y[ 1] = (x[ 1] + x[ 3]) / 2 # y center
y[ 2] = x[ 2] - x[ 0] # width
y[ 3] = x[ 3] - x[ 1] # height
return y
判断矩形是否相交
def judge_AUB_1(pointa,pointb):
'''
point[x1,y1,x2,y2]
'''
if all([max(pointa[0],pointa[2])>=max(pointb[0],pointb[2])
, min(pointa[0],pointa[2])<=min(pointb[0],pointb[2])
, max(pointa[1],pointa[3])>=max(pointb[1],pointb[3])
, min(pointa[1],pointa[3])<=min(pointb[1],pointb[3])]):
return 1
return 0
寻找多个点集合的四个顶点坐标
def find_peak(point_list):
# left,right,up,down=[]
print("",point_list)
left=right=up=down=point_list[0]
for x in point_list:
if x[0]<left[0]:
left=x
if x[0]>right[0]:
right=x
if x[1]>up[1]:
up=x
if x[1]<down[1]:
down=x
print("left,down,right,up",left,down,right,up)
#由于顶点坐标可能重复,需要去重
sort_list=[left,down,right,up]
uni_list=[]
for s in sort_list:
if s not in uni_list:
uni_list.append(s)
return uni_list
找到多边形中心点
def get_centerpoint(lis):
area = 0.0
x,y = 0.0,0.0
a = len(lis)
for i in range(a):
lat = lis[i][0] #weidu
lng = lis[i][1] #jingdu
if i == 0:
lat1 = lis[-1][0]
lng1 = lis[-1][1]
else:
lat1 = lis[i-1][0]
lng1 = lis[i-1][1]
fg = (lat*lng1 - lng*lat1)/2.0
area += fg
x += fg*(lat+lat1)/3.0
y += fg*(lng+lng1)/3.0
x = x/area
y = y/area
return int(x),int(y)
从两两相交的点中找出所有相交的关系点
[(a,b),(b,c),(c,d),(c,f)]–>[(a,b,c,d,f)]
def find_point(point, ayy):
return_point = []
for point_list in ayy:
if point == point_list[0]:
return_point.append(point_list[1])
elif point == point_list[1]:
return_point.append(point_list[0])
return return_point
new_arr = []
for index, pp in enumerate(two_inter_flower):
new_arr.append(pp)
for point in new_arr[index]:
# print("xx", point)
list_ = find_point(point, two_inter_flower)
if list_ != []:
for x in list_:
if x not in new_arr[index]:
new_arr[index].append(x)
# print("list", list)
end_list=list2heavy(new_arr) #去重,调用上面提到的函数