Para una clase de procesamiento de imágenes, estoy haciendo operaciones de puntos en imágenes monocromáticas. Los píxeles son uint8 [0,255].numpy uint8 solución de ajuste de píxeles
numpy uint8 se ajustará. Por ejemplo, 235 + 30 = 9. Necesito los píxeles para saturar (max = 255) o truncar (min = 0) en lugar de envolver.
Mi solución utiliza píxeles int32 para el punto matemático y luego se convierte en uint8 para guardar la imagen.
¿Es esta la mejor manera? ¿O hay una manera más rápida? imagen
#!/usr/bin/python
import sys
import numpy as np
import Image
def to_uint8(data) :
# maximum pixel
latch = np.zeros_like(data)
latch[:] = 255
# minimum pixel
zeros = np.zeros_like(data)
# unrolled to illustrate steps
d = np.maximum(zeros, data)
d = np.minimum(latch, d)
# cast to uint8
return np.asarray(d, dtype="uint8")
infilename=sys.argv[1]
img = Image.open(infilename)
data32 = np.asarray(img, dtype="int32")
data32 += 30
data_u8 = to_uint8(data32)
outimg = Image.fromarray(data_u8, "L")
outimg.save("out.png")
Entrada: Imagen
Salida:
np.clip() es exactamente lo que yo He estado necesitando ¡Gracias! También leeré en ImageEnhance. La tarea se trataba de hacer operaciones puntuales, pero será bueno aprender de otras maneras. –