看了网上没有一个讲解清楚的,于是直接写代码查看2种到底区别在哪,果然还是显示可以明显啊看出区别,代码如下,注意文件都来自DOTA1.5图片和标注:
import cv2
import os
import numpy as np
image_file = r'C:\Users\fut\Desktop\extract\P2750.png'
hbb_file = r'C:\Users\fut\Desktop\extract\P2750_hbb.txt'
obb_file = r'C:\Users\fut\Desktop\extract\P2750_obb.txt'
def load_lines(file):
with open(file, 'r') as f:
lines = f.read().rstrip('\n').split('\n')
return lines[2:]
def draw_image(frame, lines):
for line in lines:
data = line.split(' ')
x1 = int(float(data[0]))
y1 = int(float(data[1]))
x2 = int(float(data[2]))
y2 = int(float(data[3]))
x3 = int(float(data[4]))
y3 = int(float(data[5]))
x4 = int(float(data[6]))
y4 = int(float(data[7]))
name = data[8]
box = np.array([[x1, y1], [x2, y2], [x3, y3], [x4, y4]], np.int32)
box = box.reshape((-1, 1, 2))
cv2.polylines(frame, [box], True, (0, 0, 255), 2)
return frame
hbb_lines = load_lines(hbb_file)
obb_lines = load_lines(obb_file)
hbb_img = draw_image(cv2.imread(image_file), hbb_lines)
obb_img = draw_image(cv2.imread(image_file), obb_lines)
cv2.imshow('hbb', hbb_img)
cv2.imshow('obb', obb_img)
cv2.waitKey(0)
hbb显示结果(图太大值截取部分):
obb显示结果:
从图里面很容易看出:
obb方式更注重边框尽可能包围物体而不包含其他背景
hbb方式更注重方向,尽可能水平方向框住物体