0

有人对如何打包标头然后将其附加到一些数据块有任何提示吗?

例如,如果我有一个 16 字节的位压缩标头,然后我想将它附加到大约 2MB 的原始 RGB 图像中,那么最有效的方法是什么?

到目前为止,我已经尝试了以下

headerVals = ( str(headerVersion), str(formatEnum), frameCount, ntpTimestamp, width, height )
packedHdr = self.imgStruct.pack( *headerVals )

return packedHdr + data

但是,由于 str 和 numpy 数组不能连接,因此失败并出现以下错误:

    return packedHdr + data
TypeError: cannot concatenate 'str' and 'numpy.ndarray' objects

作为一个 Python 初学者,我能想到的唯一方法是以下方法,由于明显的原因,它非常慢:

# Generate the header
headerVals = ( str(headerVersion), str(formatEnum), frameCount, ntpTimestamp, width, height )

packDir = 'cchqhh{0}h'.format(width*height*3)

return pack( packDir, str(headerVersion), str(formatEnum), frameCount, ntpTimestamp, width, height, *data )

有任何想法吗?作为一名 Python 初学者,我发现自己对此有些困惑!

更新:

根据下面塞斯的建议,我将代码更新为以下内容,并且运行良好。

# Generate the header
headerVals = ( str(headerVersion), str(formatEnum), frameCount, ntpTimestamp, width, height )
packedHdr = self.imgStruct.pack( *headerVals )

# Concatanate header to the data
return numpy.concatenate( ( numpy.fromstring( packedHdr, dtype=numpy.uint8 ), data ), axis=0 )
4

2 回答 2

1

要将您的标头与 numpy 数组连接起来,您需要将数组设为二进制形式。假设data是一个整数数组:

import struct

raw_data = packedHdr + struct.pack('i' * data.size, *data)

如果您的数据属于不同类型,则需要在st.pack. 然后,您可以将结果解压缩raw_data为所需的形式。

于 2013-07-15T15:50:54.957 回答
0

为什么不将headerVersionandformatEnum放在一个 numpy 数组中,然后尝试连接?

于 2013-07-15T16:48:52.697 回答