La solución al error de usar la función imshow de matplotlib para mostrar imágenes a color (datos RGB)

¿Cuándo aparece el error: "Recortando datos de entrada al rango válido para imshow con datos RGB ([0..1] para flotantes o [0..255] para enteros)"?

En Python, use la función de matplotlib: plt.imshow(ndarray) cuando muestre la matriz de entrada como una imagen en color (RGB).

Además, el mensaje de error aparece solo cuando se procesan imágenes en color y se muestra como una imagen en blanco; cuando se procesan imágenes en escala de grises, la función se ejecuta normalmente y muestra la imagen.

razón

Configuración de la función plt.imshow():

  • Para matrices bidimensionales (imágenes en escala de grises), la función normaliza automáticamente los datos de entrada a [0,1] y los muestra.
  • Para matrices tridimensionales (imágenes en color), la función plt.imshow() no normaliza automáticamente los datos de entrada, pero requiere el rango de valores de datos: si son datos de tipo flotante, el rango de valores debe estar en [0, 1] ; Si se trata de datos int, el rango de valores debe ser [0,255].

La situación que tengo es que hay algunas operaciones matriciales en el paso de procesamiento de datos anterior y el tipo de datos se convierte en float64. Al ingresar una matriz 2D (que se muestra como una imagen en escala de grises), no se ve afectada porque la función está normalizada. Al ingresar una matriz tridimensional (que se muestra como una imagen en color), debe convertirse al tipo de datos y rango de valores correspondientes antes de que pueda mostrarse normalmente en la función plt.imshow().

Solución

método uno:

plt.imshow(ndarray.astype(‘uint8’))
将 float 型数据截短转换成 uint8 型数据。


Método dos:

plt.imshow(ndarray/255)

#将数据缩放到[0,1]。

Supongo que te gusta

Origin blog.csdn.net/qq_39237205/article/details/124201647
Recomendado
Clasificación