1.代码:
Yy.py文件:
import cv2
import numpy as np
def get_color(idx):
idx = idx * 3
color = ((37 * idx) % 255, (17 * idx) % 255, (29 * idx) % 255)
return color
def plot_tracking(image, tlwhs, obj_ids, scores=None, frame_id=0, fps=0., ids2=None):
if image is None:
raise ValueError("Image is None. Check if the image path is correct and the image is loaded properly.")
im = np.ascontiguousarray(np.copy(image))
# 检查图像是否为单通道并调整形状
if len(im.shape) == 2:
im_h, im_w = im.shape
im = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR) # 将单通道图像转换为三通道
else:
im_h, im_w, _ = im.shape
im = np.ascontiguousarray(np.copy(image))
im_h, im_w = im.shape[:2]
text_scale = 1.0
text_thickness = 1
line_thickness = 2
for i, tlwh in enumerate(tlwhs):
x1, y1, w, h = tlwh
x2, y2 = x1 + w, y1 + h
color = get_color(i) # 为每个对象生成一个颜色
cv2.rectangle(im, (int(x1), int(y1)), (int(x2), int(y2)), color, line_thickness)
id_text = str(obj_ids[i])
if scores is not None:
id_text += f' ({scores[i]:.2f})'
if ids2 is not None:
id_text += f', {ids2[i]}'
cv2.putText(im, id_text, (int(x1), int(y1) - 10), cv2.FONT_HERSHEY_SIMPLEX, text_scale, color, text_thickness)
return im
Nn.py文件:
import os
import cv2
from Yy import plot_tracking
# 示例图像路径
image_path = 'D:/data/00001860.jpg' # 确保路径和文件名是正确的
# 尝试加载图像
image = cv2.imread(image_path)
# 检查图像是否加载成功
if image is None:
print(f"无法加载图像,请检查路径是否正确:{image_path}")
else:
# 准备跟踪数据
tlwhs = [(676,355,41,133),(1162,364,24,26),(1269,361,40,121),(470,704,107,275),(517,348,25,59),(452,627,80,280)] # 示例边界框数据
obj_ids = [25,26,27,29,31,32] # 示例对象ID
# 调用函数来绘制跟踪信息
output_image = plot_tracking(image, tlwhs, obj_ids)
# 获取原始文件的文件名(不包括扩展名)
file_name_without_extension = os.path.splitext(os.path.basename(image_path))[0]
# 显示图像
cv2.imshow('Tracking Visualization', output_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 指定输出文件夹和文件名
output_dir = 'out'
output_file = file_name_without_extension + '.jpg'
output_path = os.path.join(output_dir, output_file)
# 检查输出文件夹是否存在,如果不存在,则创建
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 保存图像
cv2.imwrite(output_path, output_image)
2.步骤
准备工作:创建代码、获取检测框标注文本、获取每一帧解码的图片
以上诉代码为例:
- 首先在Nn.py中修改图片路径和检测框的(x,y,h,w)、ID.
- 图片路径:00001860.jpg(第00001860帧)-----Nn.py中修改:
image_path = 'D:/data/00001860.jpg'
2.标注信息:在.txt中获取相应帧(1860帧)的box信息------Nn.py中修改:
(1860:帧,25:ID,(676,355,41,133):检测框的位置信息)
# 准备跟踪数据
tlwhs = [(676,355,41,133),(1162,364,24,26),(1269,361,40,121),(470,704,107,275),(517,348,25,59),(452,627,80,280)] # 示例边界框数据
obj_ids = [25,26,27,29,31,32] # 示例对象ID
- 修改完Nn.py后,运行Nn.py,将结果就保存到了'out'文件夹中,文件夹中会生成00001860.jpg,该图片上就会标注出ID为(25,26,27,29,31,32),五个检测框。