我得到了这个学校项目,其目标是拍照,应用RLE方法以便在二进制文件(.txt)中压缩它,并节省一些空间。经过3天的骚扰,我现在遇到了麻烦。
def lecture_fichier_compresse():
f2=open("data2.txt",'rb') #open a binary file in reading mod.
im3=zeros((962,800,3),dtype="uint8") #create picture which size is 962*800 where every pixels are coded on 3 bytes.
d=0#pixel counter
i=0#lign indexation
j=0#column indexation
b=ord(f2.read(1))# the informations are read a first time
a=ord(f2.read(1))
rouge=ord(f2.read(1))
vert=ord(f2.read(1))
bleu=ord(f2.read(1))
while i!=im3.shape[0]: #as long as it doesn't reach the final lign
if d<=(a+b*255):
im3[i,j,0] = rouge
im3[i,j,1] = vert
im3[i,j,2] = bleu
d+=1
j+=1
if j==im3.shape[1]:
j=0
i+=1
else: #resets pixel counter and starts reading next informations
d=0
b=ord(f2.read(1))
a=ord(f2.read(1))
rouge=ord(f2.read(1))
vert=ord(f2.read(1))
bleu=ord(f2.read(1))
f2.close()
imsave("Copie_compresse.bmp",im3)
return im3
imshow(lecture_fichier_compresse());show()
当我执行pgrm时,它给了我这个用tittle写的错误。这是我觉得无法纠正的事情,因为它是用十六进制写的。
以下是进一步的信息: 这里使用字节不对像素进行编码,就像我们通常在.bmp这样的格式上进行编码一样。 在这里,RLE将通过比较3个级别的颜色,在同一个木板上搜索同心像素,并计算它遇到它的次数。最后,它存储了比RGB更多的两个字节:a和b。 a表示像素数。 b是255个像素堆的数量。 (因为我将数据编码为8位,而且图片通常大于255 * 255大小)
答案 0 :(得分:2)
您的文件太短,数据耗尽。找到EOF时,' https://www.google.com/recaptcha/api/siteverify'
返回空字符串。也许您的剩余字节应保留为0?
您正在以极低的效率阅读数据。使用struct
module将数据解压缩为整数,并创建一个长的numpy数组(R,G,B)三元组,然后重塑数据以形成图像矩阵:
file.read(..)
也就是说,使用您的样本文件数据,我似乎无法构建一个连贯的图像。解压缩产生695046像素的数据,这对于相干的矩形图像(数字因子进入的最高短维数为66,因此非常细长)不会产生数据。即使最后允许丢失数据,我似乎无法找到产生连贯图像的任何宽高比。结论是您的输入数据不完整或不正确。