ValueError: невозможно преобразовать массив размером 1048576 в форму (1024,1024,3)

Ниже приведен фрагмент кода из файла.ipynb.

for image_path in TEST_IMAGE_PATHS:
  print(image_path)  
  image = Image.open(image_path)
  print('yooo')  
  # the array based representation of the image will be used later in order to prepare the
  # result image with boxes and labels on it.
  image_np = load_image_into_numpy_array(image)
  print(image_np)
  # Expand dimensions since the model expects images to have shape: [1, None, None, 3]
  image_np_expanded = np.expand_dims(image_np, axis=0)
  # Actual detection.
  output_dict = run_inference_for_single_image(image_np, detection_graph)
  # Visualization of the results of a detection.
  vis_util.visualize_boxes_and_labels_on_image_array(
      image_np,
      output_dict['detection_boxes'],
      output_dict['detection_classes'],
      output_dict['detection_scores'],
      category_index,
      instance_masks=output_dict.get('detection_masks'),
      use_normalized_coordinates=True,
      line_thickness=8)
  plt.figure(figsize=IMAGE_SIZE)
  plt.imshow(image_np)

Я пытаюсь проверить точность моей модели на наборе изображений. из приведенного выше кода я получаю следующую ошибку

ValueError                                Traceback (most recent call last)
<ipython-input-30-ee1cf025b3f1> in <module>
      6   # the array based representation of the image will be used later in order to prepare the
      7   # result image with boxes and labels on it.
----> 8   image_np = load_image_into_numpy_array(image)
      9   print('yooo')
     10   print(image_np)

<ipython-input-15-af094dcdd84a> in load_image_into_numpy_array(image)
      2   (im_width, im_height) = image.size
      3   return np.array(image.getdata()).reshape(
----> 4       (im_height, im_width, 3)).astype(np.uint8)

ValueError: cannot reshape array of size 1048576 into shape (1024,1024,3)

Может кто-нибудь, пожалуйста, помогите мне решить эту ошибку?

1 ответ

Решение

Существует два способа кодирования пикселей:

1- Вы используете шестнадцатеричный код для представления значения цвета

2- Вы используете триплет значений от 0 до 255

здесь у вас есть 1024*1024 = 1048576 пикселей, что означает, что он был закодирован в шестнадцатеричных значениях, и вы пытаетесь загрузить его в матрицу формы (1024,1024,3), что означает, что это представление триплета RGB.

Как решить эту проблему: измените форму (1024,1024), затем расширьте до (1024,1024,3), разбив шестнадцатеричную формулу на три значения (RGB).( Вот способ сделать это,if image.format == "PNG":image = image.convert('RGB') как было предложено здесь в качестве решения этой проблемы

Другие вопросы по тегам