for object in root.findall('object'):
for part in object.findall('part'):
if part.find('name').text == 'hand':
bndbox = part.find('bndbox')
xmin = int(bndbox.find('xmin').text)
ymin = int(bndbox.find('ymin').text)
xmax = int(bndbox.find('xmax').text)
ymax = int(bndbox.find('ymax').text)
x = round(((xmax - xmin) / 2 + xmin) / width, 6)
y = round(((ymax - ymin) / 2 + ymin) / height, 6)
w = round((xmax - xmin) / width, 6)
h = round((ymax - ymin) / height, 6)
c = 0
np.savetxt('1.txt', np.array([c, x, y, w, h]).reshape(1,5))
虽然对x,y,w,h限定了保留小数点后六位,但np.savetxt保存下来的1.txt文件仍然是%18e的
这是因为np.savetxt()函数在保存浮点数到文本文件时,默认并不会限定浮点数的小数位数。它会以“%.18e”的格式保存浮点数,也就是科学计数法形式保存,小数位数不定。所以在这个代码中,x、y、w、h虽然计算结果是限定到小数点后6位的,但调用np.savetxt()保存到文件时,小数位数就不定了。要解决这个问题,你可以向np.savetxt()指定float_format参数,限定浮点数的保存格式。例如:
np.savetxt('1.txt', np.array([c, x, y, w, h]).reshape(1,5), fmt='%.6f')
或
np.savetxt('1.txt', np.array([c, x, y, w, h]).reshape(1,5), fmt='%.6e')
这将浮点数格式保存为‘%.6f’形式或‘%.6e’科学计数法形式,都可以限定小数位数到6位
并且在np.savetxt()中,你可以同时指定多个float_format参数,分别对不同的列应用不同的格式
np.savetxt('1.txt', np.array([1, 0.123456, 0.234567, 0.345678]).reshape(1,4),
fmt=['%d', '%.6f', '%.6f', '%.6f'])