如何操纵跟踪器区域使其成为正方形?
How can I manipulate the tracker area to make it into a square shape?
我目前正在从事一个关于相机跟踪应用程序的项目。当我不得不改变检测到的物体的区域时,我发现没什么问题。该区域必须转换为正方形,以便在屏幕上显示时更加合适和真实。
这是我正在处理的几行代码。
for cam, coll in _colls.items():
# get all track
tracks = coll.getAllTracks() #tracks is a dictionary that stores the details of object that being detected.
for x in range(len(tracks)):
# get the selected area for croping
edge = tracks[x]['box']
crop_img = frame[int(edge[0]):int(edge[2]), int(edge[1]):int(edge[3])]
# edge[0] = ymin
# edge[1] = xmin
# edge[2] = ymax
# edge[3] = xmax
根据该代码,我找到了一个正在检测对象的区域。
问题是当我得到边缘时,它并不总是正方形的形式,它也可以是矩形的。应该是怎么操作,从那个边缘点,我能不能像下图那样做一个正方形?
您必须计算该区域的宽度和高度。计算宽度和高度之间的差异,并放大该区域的较小一侧。例如:
left, right, top, bottom = edge[0], edge[1], edge[2], edge[3]
width = right - left
height = bottom - top
delta = width - height
if delta > 0:
top -= delta / 2
bottom += delta / 2
else
left -= -delta / 2
right += -delta / 2
crop_img = frame[int(left):int(top), int(right):int(bottom)]
我目前正在从事一个关于相机跟踪应用程序的项目。当我不得不改变检测到的物体的区域时,我发现没什么问题。该区域必须转换为正方形,以便在屏幕上显示时更加合适和真实。
这是我正在处理的几行代码。
for cam, coll in _colls.items():
# get all track
tracks = coll.getAllTracks() #tracks is a dictionary that stores the details of object that being detected.
for x in range(len(tracks)):
# get the selected area for croping
edge = tracks[x]['box']
crop_img = frame[int(edge[0]):int(edge[2]), int(edge[1]):int(edge[3])]
# edge[0] = ymin
# edge[1] = xmin
# edge[2] = ymax
# edge[3] = xmax
根据该代码,我找到了一个正在检测对象的区域。
问题是当我得到边缘时,它并不总是正方形的形式,它也可以是矩形的。应该是怎么操作,从那个边缘点,我能不能像下图那样做一个正方形?
您必须计算该区域的宽度和高度。计算宽度和高度之间的差异,并放大该区域的较小一侧。例如:
left, right, top, bottom = edge[0], edge[1], edge[2], edge[3]
width = right - left
height = bottom - top
delta = width - height
if delta > 0:
top -= delta / 2
bottom += delta / 2
else
left -= -delta / 2
right += -delta / 2
crop_img = frame[int(left):int(top), int(right):int(bottom)]