scikit open not ndarray book array python image image-processing numpy

open - Combina 3 matrices numpy separadas a una imagen RGB en Python



open image python numpy (4)

Así que tengo un conjunto de datos que puedo convertir para formar matrices numpy separadas de R, G, B bandas. Ahora necesito combinarlos para formar una imagen RGB.

Intenté ''Imagen'' para hacer el trabajo, pero se requiere ''modo'' para ser atribuido.

Traté de hacer un truco. Yo usaría Image.fromarray () para tomar la matriz a la imagen, pero alcanza el modo ''F'' por defecto cuando Image.merge requiere que se combinen las imágenes del modo ''L''. Si declarara el atributo de array en fromarray () a ''L'' en primer lugar, todas las imágenes RGB se distorsionarían.

Pero, si guardo las imágenes y luego las abro y luego me fusiono, funciona bien. La imagen lee la imagen con el modo ''L''.

Ahora tengo dos problemas.

Primero, no creo que sea una forma elegante de hacer el trabajo. Entonces, si alguien conoce la mejor manera de hacerlo, dígale

En segundo lugar, Image.SAVE no funciona correctamente. Los siguientes son los errores que enfrento:

In [7]: Image.SAVE(imagefile, ''JPEG'') ---------------------------------------------------------------------------------- TypeError Traceback (most recent call last) /media/New Volume/Documents/My own works/ISAC/SAMPLES/<ipython console> in <module>() TypeError: ''dict'' object is not callable

Por favor sugiera soluciones.

Y por favor, tenga en cuenta que la imagen tiene una matriz de tamaño de 4000x4000.


Convierta las matrices numpy a uint8 antes de pasarlas a Image.fromarray

P.ej. si tiene flotadores en el rango [0..1]:

r = Image.fromarray(numpy.uint8(r_array*255.999))


Realmente no entiendo tu pregunta, pero aquí hay un ejemplo de algo similar que he hecho recientemente que parece que podría ser útil:

# r, g, and b are 512x512 float arrays with values >= 0 and < 1. from PIL import Image import numpy as np rgbArray = np.zeros((512,512,3), ''uint8'') rgbArray[..., 0] = r*256 rgbArray[..., 1] = g*256 rgbArray[..., 2] = b*256 img = Image.fromarray(rgbArray) img.save(''myimg.jpeg'')

Espero que eso ayude


Tu distorsión creo que es causada por la forma en que estás dividiendo tu imagen original en sus bandas individuales y luego la redimensionas nuevamente antes de ponerla en fusión;

` image=Image.open("your image") print(image.size) #size is inverted i.e columns first rows second eg: 500,250 #convert to array li_r=list(image.getdata(band=0)) arr_r=np.array(li_r,dtype="uint8") li_g=list(image.getdata(band=1)) arr_g=np.array(li_g,dtype="uint8") li_b=list(image.getdata(band=2)) arr_b=np.array(li_b,dtype="uint8") # reshape reshaper=arr_r.reshape(250,500) #size flipped so it reshapes correctly reshapeb=arr_b.reshape(250,500) reshapeg=arr_g.reshape(250,500) imr=Image.fromarray(reshaper,mode=None) # mode I imb=Image.fromarray(reshapeb,mode=None) img=Image.fromarray(reshapeg,mode=None) #merge merged=Image.merge("RGB",(imr,img,imb)) merged.show() `

esto funciona bien!


rgb = np.dstack((r,g,b)) # stacks 3 h x w arrays -> h x w x 3

Para convertir también flotadores 0 .. 1 a uint8 s,

rgb_uint8 = (np.dstack((r,g,b)) * 255.999) .astype(np.uint8) # right, Janna, not 256