#python #numpy
Вопрос:
Привет, я пытаюсь открыть изображение и изменить его форму, и я понимаю, что ошибка, кто-нибудь может мне помочь, пожалуйста
import matplotlib.pyplot as plt import numpy as np file_handle=open("compressed_image2.bin","rb") img_compressed=np.fromfile(file_handle,dtype='uint8') file_handle.close() def decodeImage(img): original = np.zeros(img_compressed[0]*img_compressed[1],dtype = "uint8") t = y = count = 0 for i in range(len(img)): if not (i == 0 or i == 1): if (t % 2) == 0: count = img[i] else: for x in range(count): original[y x] = img[i] y = count t = 1 return original original=decodeImage(img_compressed) C = len(original)/len(img_compressed) R = 1 - 1/C print("n Die Kompressionsrate ist C=",C) print("n Die Redundanz ist R = ",R) original = np.reshape(original, [img_compressed[1], img_compressed[0]]) plt.imshow(original, cmap = "gray")
и это моя ошибка, может ли кто-нибудь увидеть, в чем проблема?
, line 27, in decodeImage original[y x] = img[i] IndexError: index 140 is out of bounds for axis 0 with size 140
Комментарии:
1. в python индекс начинается с нуля и переходит в
N-1
2. Опечатка. Ты хочешь
original = np.zeros(img_compressed.shape[0]*img_compressed.shape[1],dtype = "uint8")
. Вы используете первые два значения пикселей, а не ширину и высоту. У вас та же проблема вnp.reshape
очереди.3. Ну, погоди, мой совет тоже никуда не годится. Вы читаете его не как изображение, вы читаете его как поток байтов. Откуда взялся этот файл? Похоже, вы пытаетесь выполнить сжатие RLE, но кто это написал? Если это 2D-массив, то первые два байта не будут иметь ширины и высоты. Вам нужно показать нам первые несколько байтов файла или, по крайней мере, спецификацию, которую вы использовали для написания этого.
4. спасибо, я сделал это с помощью shape[0] и shape[1]. у меня была другая проблема IndexError: индекс кортежа вне диапазона, это изображение