[英]Construct a Numpy array from a hexadecimal string
我有一个十六进制字符串"89-50-4E-47-0D-0A-1A-0A-00-00-00-0D-49"
,具体来说这将包含图像的数据。
我想将其转换为 Numpy 数组或可能从所述数据重建 OpenCV 图像。
还将提供宽度和高度,以便知道 Numpy 数组的尺寸。
如何从上述字符串构造一个 Numpy 数组?
我们可以使用np.fromiter
,投个体线为十六进制,使用base
的说法int
使用,然后到整数类型dtype
中的说法np.fromiter
:
s = "89-50-4E-47-0D-0A-1A-0A-00-00-00-0D-49"
np.fromiter((int(x, 16) for x in s.split('-')), dtype=np.int32)
# array([137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73])
您可以通过破折号split
字符串并将单个 base-16 数字转换为int
。
>>> import numpy as np
>>> hext_str = "89-50-4E-47-0D-0A-1A-0A-00-00-00-0D-49"
>>> np.array([int(x, 16) for x in hex_str.split("-")])
array([137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73])
假设(n, m)
是图像的尺寸可以在结果上使用.reshape((n, m))
的方法np.array
。
import numpy as np arr = np.array([int(x, 16) for x in "89-50-4E-47-0D-0A-1A-0A-00-00-00-0D-49".split("-")]) print(arr)
如果关注内存效率,则十六进制数中的两位数字对应于一个无符号的 8 位整数(即 0 到 255 之间的数字)。
要返回原始字符串,您可以使用format(number, '02x')
(零填充的 2 长度十六进制数字字符串)
hex_str = "89-50-4E-47-0D-0A-1A-0A-00-00-00-0D-49"
arr = np.fromiter((int(x, 16) for x in hex_str.split('-')), dtype=np.uint8)
# array([137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73],
dtype=uint8)
该数组仅占用 13 个字节的空间,而整数的默认数组类型 (np.int64) 将占用 104 个字节。
曾经可以通过以下方式将其恢复为原始字符串形式:
hex_str = '-'.join((format(x, '02x') for x in arr)).upper()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.