Ошибка индекса: индекс 140 выходит за рамки для оси 0 с размером 140

#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: индекс кортежа вне диапазона, это изображение