用 OpenCV 标注 bounding box 主要用到下面两个工具——cv2.rectangle() 和 cv2.putText()。用法如下:
# cv2.rectangle() # 输入参数分别为图像、左上角坐标、右下角坐标、颜色数组、粗细 cv2.rectangle(img, (x,y), (x+w,y+h), (B,G,R), Thickness) # cv2.putText() # 输入参数为图像、文本、位置、字体、大小、颜色数组、粗细 cv2.putText(img, text, (x,y), Font, Size, (B,G,R), Thickness)
def plt_bboxes(img, classes, scores, bboxes, figsize=(10,10), linewidth=1.5):
"""Visualize bounding boxes. Largely inspired by SSD-MXNET!
"""
#fig = plt.figure(figsize=figsize)
#plt.imshow(img)
height = img.shape[0]
width = img.shape[1]
colors = dict()
for i in range(classes.shape[0]):
cls_id = int(classes[i])
if cls_id == 15:
score = scores[i]
if cls_id not in colors:
colors[cls_id] = (random.random(), random.random(), random.random())
ymin = int(bboxes[i, 0] * height)
xmin = int(bboxes[i, 1] * width)
ymax = int(bboxes[i, 2] * height)
xmax = int(bboxes[i, 3] * width)
#rect = plt.Rectangle((xmin, ymin), xmax - xmin,
#ymax - ymin, fill=False,
#edgecolor=colors[cls_id],
#linewidth=linewidth)
#plt.gca().add_patch(rect)
class_name = str(cls_id)
img=cv2.rectangle(img,(xmin,ymin),(xmax,ymax),(0,255,0),2)
s = ‘person/%.3f‘ % (score)
img=cv2.putText(img,s,(xmax+2,ymin-2), cv2.FONT_HERSHEY_DUPLEX, 0.5, (0,255,0), 1)
cv2.imwrite(‘new.jpg‘, img)
cv2.namedWindow(‘Detection‘)
cv2.imshow(‘Detection‘,img)
cv2.destroyAllWindows()
if
cv2.waitKey(0)
#plt.gca().text(xmin, ymin - 2,
#‘{:s} | {:.3f}‘.format(class_name, score),
#bbox=dict(facecolor=colors[cls_id], alpha=0.5),
#fontsize=12, color=‘white‘)
#plt.show()