图像数据数组的长度不同?Python PIL
我有一个程序可以将图像分解为1和0(如下所示)。我的问题是,对于不同的图像,阵列的长度不同(使用相同的网络摄像头拍摄,没有压缩) 代码如下:图像数据数组的长度不同?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
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”?