Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
图像数据数组的长度不同?Python PIL_Python_Arrays_Python 3.x_Image_Python Imaging Library - Fatal编程技术网

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

图像数据数组的长度不同?Python PIL,python,arrays,python-3.x,image,python-imaging-library,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.s

我有一个程序可以将图像分解为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
我很困惑,因为我在同一时间用同样的摄像头,同样的分辨率拍摄了这些照片。它们的文件大小不同,但我不知道为什么


感谢您提供的所有解决方案

你没有给我们看图像,但这可能是因为压缩吗?JPG文件是压缩的,许多其他文件格式也是压缩的


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

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

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


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

这很有意义;有什么解决方案可以推荐吗?在raw中拍照会有帮助吗?取决于“raw”是否表示无标题的无损JPEG或RGB值。检查生成的数组的大小。如果是(高*宽*3),那么数据很可能是RGB数据。我将图像转换为BMP,它们仍然有点偏离。相同的高度和宽度?文件大小是多少(字节或位)?是的,相同的高度和宽度。我的程序中的文件大小是1284116和1267967。等等,你的代码看起来像是将像素转换成字符串?然后将字符串中的每个字符追加到列表中?字符串的大小不会相同,因为尽管1和10都是整数,但1中只有一个字符,10中只有两个字符。啊,bin()是否预先挂起零?也就是说,它是否为十进制值1返回“00000001”?还是只返回“1”?