我有一个程序将图像分解为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添加到某些二进制字符串。