图像数据的数组是不同的长度? Python PIL

时间:2018-02-11 00:09:55

标签: python arrays python-3.x image python-imaging-library

我有一个程序将图像分成1和0(如下所示)。我的问题是阵列对于不同的图像是不同的长度(使用相同的网络摄像头并且没有压缩)。

以下是代码:

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

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

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

2 个答案:

答案 0 :(得分:1)

您没有向我们展示图片,但可能是因为压缩? JPG文件是压缩的,还有许多其他文件格式。

即使两张照片相互拍摄的照片也有点不同而且压缩方式不同,因此“相同的分辨率,不同的文件大小”。

答案 1 :(得分:0)

PIL可以将JPEG转换为BMP。 JPEG被压缩(频域和量化,所以即使它是无损的,两个图像可能因其内容而有不同的大小)。 BMP只是每个像素的RGB(红色,绿色,蓝色)值加上标题。对于具有相同高度和宽度的图像,.bmp文件将具有相同的大小(标题加上高度x宽度x 3个通道)。但是,jpeg文件会更小。

当然,getdata()将返回像素值。

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