Así que tengo un conjunto de datos que soy capaz de convertir a forma separada de los arrays de numpy de R, G, B de las bandas. Ahora necesito combinar para formar una imagen RGB.

Traté de ‘Imagen’ para hacer el trabajo, pero se requiere de «mode» para atribuir.

Traté de hacer un truco. Yo usaría la Imagen.fromarray() para tomar la matriz de la imagen, pero se llega a ‘F’ en el modo por defecto cuando la Imagen.mezcla requiere ‘L’ imágenes en modo de combinar. Si iba a declarar el atributo de la matriz en fromarray () ‘L’ en primer lugar, todos los R G B imágenes se distorsionan.

Pero, si puedo guardar las imágenes y, a continuación, abrir y, a continuación, combinar, funciona bien. La imagen se lee la imagen con ‘L’ modo.

Ahora tengo dos problemas.

Primero, yo no creo que es una forma elegante de hacer el trabajo. Así que si alguien sabe la mejor manera de hacerlo, por favor, dígale a

En Segundo Lugar, La Imagen.GUARDAR no está funcionando adecuadamente. Siguientes son los errores a los que me 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, sugerir soluciones.

Y por favor tenga en cuenta que la imagen es de alrededor de 4000×4000 tamaño de la matriz.

InformationsquelleAutor Ishan Tomar | 2012-05-04

4 Comentarios

  1. 49

    Yo no entiendo muy bien tu pregunta, pero aquí es un ejemplo de algo similar que he hecho recientemente, que parece que podría ayudar:

    # 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 le ayuda a

    • Muchas gracias! Esto funciona
    • usted puede desear para aceptar esa respuesta si te fue de ayuda.
    • Si desea guardar la matriz como una imagen que debe ser «toimage»
    • Gracias muchachos, Gracias por la respuesta
    • usted realmente debe aceptar la mayoría de las respuestas útiles, que es una parte importante de lo que mantiene a StackOverflow marcando
    • Esto es perfecto. datos de[…, 0] = b los datos[…, 1] = g data[…, 2] = r` es lo que yo necesitaba

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

    Para convertir carrozas 0 .. 1 uint8 s,

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

    Convertir los arrays de numpy para uint8 antes de pasarlos a Image.fromarray

    Por ejemplo. si usted tiene que flota en el rango [0..1]:

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

    Su distorsión creo que es causada por la forma en que se está dividiendo la imagen original en cada uno de sus bandas y, a continuación, cambiar su tamaño de nuevo antes de ponerla en correspondencia,

    `
    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 !

Dejar respuesta

Please enter your comment!
Please enter your name here