1
我有一個攝像機的原始數據,它是mono12packed格式。這是一種隔行位格式,用3個字節存儲2個12位整數以消除開銷。明確每個3個字節的內存佈局是這樣的:用python輕鬆解開mono12packed bitstring格式
Byte 1 = Pixel0 Bits 11-4
Byte 2 = Pixel1 Bits 3-0 + Pixel0 Bits 3-0
Byte 3 = Pixel1 Bits 11-4
我有一個文件,其中所有的字節可以使用二進制讀來讀取,讓我們假設它被稱爲binfile
。
要獲得從文件中PixelData取出我做的:
from bitstring import BitArray as Bit
f = open(binfile, 'rb')
bytestring = f.read()
f.close()
a = []
for i in range(len(bytestring)/3): #reading 2 pixels = 3 bytes at a time
s = Bit(bytes = bytestring[i*3:i*3+3], length = 24)
p0 = s[0:8]+s[12:16]
p1 = s[16:]+s[8:12]
a.append(p0.unpack('uint:12'))
a.append(p1.unpack('uint:12'))
它的工作原理,但可怕的慢,我想更有效地做到這一點,因爲我必須做的是一個巨大的數據量。
我的想法是,通過一次讀取多於3個字節,我可以在轉換步驟中省下一些時間,但我無法想象如何做到這一點。
另一個想法是,由於位是4的包,也許有辦法處理半字節而不是位。
數據例如:
的字節
'\x07\x85\x07\x05\x9d\x06'
導致
[117, 120, 93, 105]
差不多200倍!太棒了,謝謝你! – Dschoni
您能否解釋一下,在按位運算符中發生了什麼,以及爲什麼這會起作用? – Dschoni
當然我可以,但我想看看維基百科https://en.wikipedia.org/wiki/Bitwise_operation等來源更合理。 – Szabolcs