图像数据的数组是不同的长度吗?python pil



我有一个程序将图像分解为1s和0s(如下所示(。我的问题是阵列的不同图像的长度不同(使用相同的网络摄像头拍摄,没有压缩(。

这是代码:

from PIL import Image
def read(filename):
    image = Image.open(filename, 'r')
    basewidth = 300
    wpercent = (basewidth/float(image.size[0]))
    hsize = int((float(image.size[1])*float(wpercent)))
    image = image.resize((basewidth,hsize), Image.ANTIALIAS)
    width, height = image.size
    print(width)
    print(height)
    data = list(image.getdata())
    binData = []
    for i in data:
        for j in i:
            tempBin = str(bin(j))
            for k in tempBin:
                if k != "b":
                    binData.append(int(k))
    print(len(binData))
    return binData

我很困惑,因为我同时使用相同的网络摄像头拍摄了照片。它们是不同的文件大小,但我不知道为什么。

感谢您提供的任何解决方案!

您不向我们展示图像,但这可能是由于压缩吗?JPG文件被压缩,许多其他文件格式是。

即使是两张彼此拍摄的两张图片也有些不同,并以不同的方式压缩,因此"相同的分辨率,不同的文件大小"。

pil可以将JPEG转换为BMP。JPEG被压缩(频域和量化,因此即使它是无损的,两个图像的大小可能仅仅是因为它们的内容(。BMP只是每个像素和标头的RGB(红色,绿色,蓝色(值。对于具有相同高度和宽度的图像,.bmp文件的尺寸将相同(标题和高度x宽度x 3通道(。jpeg文件将较小。

当然,GetData((将返回像素值。

如果将字节转换为二进制字符串,则需要将所有二进制字符串具有相同的长度,并且您可能需要手动将上的0添加到某些二进制字符串。

最新更新