在Python中组合压缩头和numpy数组

2024-10-02 12:27:25 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有人对如何打包头并将其附加到某个数据块有什么建议?在

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

到目前为止,我尝试了以下方法

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

return packedHdr + data

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

^{pr2}$

作为一个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创始者,我发现自己有点困惑!在

更新:

根据下面seth的建议,我将我的代码更新到了下面,它运行得很好。在

# 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 )

Tags: the方法numpydatareturnwidthpackheight
2条回答

为什么不把headerVersionformatEnum放入一个numpy数组中,然后尝试concat呢?在

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

import struct

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

如果您的数据是另一种类型,则需要在st.pack中指定它。然后可以将结果raw_data以所需的形式解包。在

相关问题 更多 >

    热门问题