我有一个程序将图像分成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
我很困惑,因为我用相同的网络摄像头,相同的分辨率同时拍摄了照片。它们的文件大小不同,但我不知道为什么。
感谢您提供的任何解决方案!
答案 0 :(得分:1)
您没有向我们展示图片,但可能是因为压缩? JPG文件是压缩的,还有许多其他文件格式。
即使两张照片相互拍摄的照片也有点不同而且压缩方式不同,因此“相同的分辨率,不同的文件大小”。
答案 1 :(得分:0)
PIL可以将JPEG转换为BMP。 JPEG被压缩(频域和量化,所以即使它是无损的,两个图像可能因其内容而有不同的大小)。 BMP只是每个像素的RGB(红色,绿色,蓝色)值加上标题。对于具有相同高度和宽度的图像,.bmp文件将具有相同的大小(标题加上高度x宽度x 3个通道)。但是,jpeg文件会更小。
当然,getdata()将返回像素值。
如果将字节转换为二进制转换为字符串,则需要使所有二进制字符串具有相同的长度,并且您可能需要手动将前面的0添加到某些二进制字符串中。