微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ValueError:无法将大小为 49897 的数组重塑为形状 (500,700,3)

如何解决ValueError:无法将大小为 49897 的数组重塑为形状 (500,700,3)

大家好,我正在实施 lzw 压缩算法图片压缩算法

使用的库

import re
import numpy as np
from PIL import Image
import sys
from sys import argv
from struct import *
import pickle
from cv2 import cv2

压缩

def lzwCompression (image,path):
    img = cv2.imread(image)
    shape = img.shape
    flat = img.reshape(-1)
       
    #Costruzione del Dizionario
    lenDictionary = 256
    dictionary = {chr(i): i for i in range(lenDictionary)}
    
    for i in range(256):
        dictionary[chr(i)] = i 

    compressed = list()
    stringSaved = chr(flat[0])
    print ("string symbl",stringSaved )
    for i in range(1,len(flat)):
        string_symbol = chr (flat[i])
        sc =  stringSaved + string_symbol
        if sc in dictionary.keys() :
            stringSaved = string_symbol
        else:
            compressed.append(dictionary[stringSaved])
            dictionary[sc] = lenDictionary
            lenDictionary = lenDictionary + 1

    if stringSaved:
        compressed.append(dictionary[stringSaved])

    with open(path,"wb") as f:
        pickle.dump((compressed,shape),f)

**L'algoritmo di compressione non fa altro che prendere l'immagine ed applicare lzw。

在解压阶段,当算法加载压缩文件然后返回原始图像时,它给了我以下错误:ValueError: cannot reshape array of size 49897 into shape (500,700,3).

我哪里做错了?

**

解压

def lzwDecompression (path,img_path) :
    with open(path,"rb") as f:
        compressed,shape = pickle.load(f)
    dictionary = dict()
    lenDictionary = 256
    for i in range(256):
        dictionary[i] = chr(i)

    img = ""
    s = chr(compressed.pop(0))
    img += s
    for k in compressed :
        if k in dictionary.keys():
            ins = dictionary[k]
        elif k == lenDictionary:
            ins = s + s[0]
            img += ins

        dictionary[lenDictionary] = s + ins[0]
        lenDictionary +=1
        s = ins 

    img = [ord(x) for x in img]
    img = np.array(img,dtype=np.uint16).reshape(shape)
    cv2.imwrite(img_path,img)

   
**MAIN**

from LZW import * 
from PIL import Image
import numpy as np 

path1 = "LZW-Project\im3.jpg"
path2 ="Outpit"
path3 = "Input"

lzwCompression(path1,path2)
lzwDecompression(path2,path3)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。