Saltar al contenido

Conversión con pérdida de float64 a uint8

Posteriormente a mirar en diferentes repositorios y foros al concluir descubrimos la respuesta que te compartiremos ahora.

Solución:

La advertencia se explica por sí misma: color.convert_colorspace(in_hsv_h, 'HSV', 'RGB') es de tipo float64y imsaveconvertir elementos a uint8.

Los píxeles de la imagen PNG se almacenan como un byte por componente (un byte para el rojo, uno para el verde y otro para el azul).
Cada componente es un valor entero en el rango [0, 255] (escribe uint8).

La salida de color.convert_colorspace es de float64cada componente de color está dentro del rango [0, 1] de tipo float64 (almacenado como 64 bits en la memoria, y mucho más preciso que uint8).

La conversión de float64 rango [0, 1] a uint8 rango [0, 255] se realiza como: uint8_val = round(float64_val*255).
La operación de redondeo pierde algunos datos (por ejemplo: en caso float64_val*255 = 132.658, el resultado se redondea a 133).

Convierta la imagen a uint8 antes de guardar para suprimir esta advertencia

Le dice que convierta los elementos de la imagen a uint8 antes de guardar.

La solución es simple.
Multiplica por 255 y suma .astype(np.uint8).

imsave('testing-sorted-hue.png', (color.convert_colorspace(in_hsv_h, 'HSV', 'RGB')*255).astype(np.uint8))

Para que su código funcione, también debe agregar .astype(np.uint8) al construir newImage:

newImage = np.random.randint(0, 255, (300, 300, 3)).astype(np.uint8)

Código completo:

from imageio import imsave
from skimage import color

import numpy as np

newImage = np.random.randint(0, 255, (300, 300, 3)).astype(np.uint8)


in_hsv_h = color.convert_colorspace(newImage, 'RGB', 'HSV')
in_hsv_s = in_hsv_h.copy()
in_hsv_v = in_hsv_h.copy()

for i in range(newImage.shape[0]):
    in_hsv_h[i,:,0] = np.sort(in_hsv_h[i,:,0])
    in_hsv_s[i,:,1] = np.sort(in_hsv_s[i,:,1])
    in_hsv_v[i,:,2] = np.sort(in_hsv_v[i,:,2])

imsave('testing-sorted-hue.png', (color.convert_colorspace(in_hsv_h, 'HSV', 'RGB')*255).astype(np.uint8))
imsave('testing-sorted-saturation.png', (color.convert_colorspace(in_hsv_s, 'HSV', 'RGB')*255).astype(np.uint8))

Observación:
El ejemplo en makeartwithpython usa from imageio import imsave en vez de from scipy.misc import imsavey el ejemplo en el sitio funciona correctamente.

Nota:
No tengo mucha experiencia en programación de Python, tome mi respuesta con precaución.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *