【问题标题】:How to convert a boundary box hexa value to integer?如何将边界框十六进制值转换为整数?
【发布时间】:2019-03-02 13:54:15
【问题描述】:

这是一个 XML 文件,我想在其中使用 python 获取边界框坐标。可以看到有一个 BBox 属性,其中包含 (x1,y1,x2,y2) 的十六进制字符串。

我使用 python 解析边界框信息,但问题是如何将这个 16 位十六进制值转换为人类可读的整数值,我们熟悉将其视为对象边界坐标值。

我使用了int('hex str', 16),但它给出了一个很大的整数值,这显然不像是 800x1200 尺寸图像的坐标值。在这种情况下,BBox 的第一个值是 '4074145c00000005',我在转换 4644359501095370757 后得到。

请给我一个解决方案,如何将此边界框坐标转换为人类可以理解的整数值。

【问题讨论】:

  • 了解这些值的实际含义会很有帮助。显然它们不是像素位置/大小。顺便说一句:在问题中将代码和数据显示为格式正确的文本,而不是图像。
  • 这个 BBox 值是我在 Marmot 数据集中找到的图像的表格坐标,他们已经提到这些是十六进制字符串中的表格坐标。
  • 这些数字必须以某种单位衡量。 XML 数据格式文档应该说明它是什么。

标签: python int hex converters


【解决方案1】:

最后我得到了将这个 16 位十六进制字符串转换为人类可以理解的十进制/整数值的解决方案。此值表示使用 IEEE 784 标准转换,在 enter link description here 中进行了说明。这个 16 位的 hexa 值用于表示浮点转换以获得更准确的坐标位置。

tab = ['0000000000000000', '408a500000000000', '4082980000000000', '0000000000000000']
int_val = [int(struct.unpack('!d', str(t).decode('hex'))[0]) for t in tab]
print "convert to int : ", int_val

函数struct.unpack(format, buffer)用来转换有两个参数。第一个参数用于格式!d,其中d 表示C 中的Double 或python 中的float,! 符号用于指示字节顺序。有5 个字节顺序@, =, <, >, ! 用于表示我需要转换的格式。

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 2014-04-16
    • 2016-12-04
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多