[英]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.