MS Paint位图奇怪地编码?尝试使用Cython / PIL进行子图像搜索

时间:2017-01-23 14:53:08

标签: python format pillow bitmapimage bytesio

我正在尝试使用cython进行子图像搜索。我得到像素阵列的方式是:

def imageBytes(image):
    with io.BytesIO() as bytes_io:
        image.save(bytes_io, 'BMP')
        data = bytes_io.getvalue() 
        offset = int.from_bytes(data[10:14], byteorder='little', signed=False)
        data = data[offset:]        # pixels start here
    return data

这是一个2x2像素24位.BMP图像的十六进制转储,填充纯红色,右下角除外,它是纯蓝色。

42 4D 46 00 00 00 00 00 00 00 36 00 00 00 28 00 <br>
00 00 02 00 00 00 02 00 00 00 01 00 18 00 00 00 <br>
00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 <br>
00 00 00 00 00 00/00 00 FF FF 00 00 00 00 00 00 <br>
FF 00 00 FF 00 00

0x36 = 54
因此图像数据从上面的正斜杠开始。在像素空间中从左到右,并假设地址从上到下,从左到右,00 00 FF之后的下一个像素应为00 00 FF,但它显示为蓝色, hexwise。在那之后我无法解释额外的全零字节。

那么如何以正确的方式从PIL图像中获取python bytes对象?

1 个答案:

答案 0 :(得分:1)

enter image description here


它表示&#34;填充为4个字节的倍数&#34;。