una pixeles matriz leer imagen convertir como cargar python graphics rgb

pixeles - convertir imagen a matriz python



¿Cómo puedo leer el valor RGB de un píxel dado en Python? (12)

Si abro una imagen con open("image.jpg") , ¿cómo puedo obtener los valores RGB de un píxel suponiendo que tengo las coordenadas del píxel?

Entonces, ¿cómo puedo hacer el reverso de esto? Comenzando con un gráfico en blanco, ''escriba'' un píxel con un cierto valor RGB?

Preferiría si no tuviera que descargar ninguna biblioteca adicional.


Como Dave Webb dijo:

Aquí está mi fragmento de código de trabajo que imprime los colores de píxel de una imagen:

import os, sys import Image im = Image.open("image.jpg") x = 3 y = 4 pix = im.load() print pix[x,y]


Hay un artículo realmente bueno en wiki.wxpython.org titulado Trabajar con imágenes . El artículo menciona la posibilidad de usar wxWidgets (wxImage), PIL o PythonMagick. Personalmente, he usado PIL y wxWidgets y ambos hacen que la manipulación de imágenes sea bastante fácil.


La manipulación de imágenes es un tema complejo, y es mejor si utiliza una biblioteca. Puedo recomendar gdmodule que proporciona acceso fácil a muchos formatos de imagen diferentes desde dentro de Python.


Probablemente sea mejor utilizar la biblioteca de imágenes de Python para hacer esto, lo que me temo es una descarga por separado.

La forma más fácil de hacer lo que desea es mediante el método load () en el objeto Image que devuelve un objeto de acceso a píxeles que puede manipular como una matriz:

from PIL import Image im = Image.open(''dead_parrot.jpg'') # Can be many different formats. pix = im.load() print im.size # Get the width and hight of the image for iterating over print pix[x,y] # Get the RGBA Value of the a pixel of an image pix[x,y] = value # Set the RGBA Value of the image (tuple) im.save(''alive_parrot.png'') # Save the modified pixels as .png

Alternativamente, mira ImageDraw que proporciona una API mucho más rica para crear imágenes.


Puede usar el módulo Tkinter, que es la interfaz estándar de Python para el kit de herramientas Tk GUI y no necesita una descarga adicional. Ver https://docs.python.org/2/library/tkinter.html .

(Para Python 3, Tkinter se renombra a tkinter)

Aquí es cómo configurar los valores RGB:

#from http://tkinter.unpythonic.net/wiki/PhotoImage from Tkinter import * root = Tk() def pixel(image, pos, color): """Place pixel at pos=(x,y) on image, with color=(r,g,b).""" r,g,b = color x,y = pos image.put("#%02x%02x%02x" % (r,g,b), (y, x)) photo = PhotoImage(width=32, height=32) pixel(photo, (16,16), (255,0,0)) # One lone pixel in the middle... label = Label(root, image=photo) label.grid() root.mainloop()

Y obtén RGB:

#from http://www.kosbie.net/cmu/spring-14/15-112/handouts/steganographyEncoder.py def getRGB(image, x, y): value = image.get(x, y) return tuple(map(int, value.split(" ")))


Puedes usar el módulo surfarray de pygame. Este módulo tiene un método de devolución de matriz de píxeles 3d llamado pixels3d (superficie). He mostrado el uso a continuación:

from pygame import surfarray, image, display import pygame import numpy #important to import pygame.init() image = image.load("myimagefile.jpg") #surface to render resolution = (image.get_width(),image.get_height()) screen = display.set_mode(resolution) #create space for display screen.blit(image, (0,0)) #superpose image on screen display.flip() surfarray.use_arraytype("numpy") #important! screenpix = surfarray.pixels3d(image) #pixels in 3d array: #[x][y][rgb] for y in range(resolution[1]): for x in range(resolution[0]): for color in range(3): screenpix[x][y][color] += 128 #reverting colors screen.blit(surfarray.make_surface(screenpix), (0,0)) #superpose on screen display.flip() #update display while 1: print finished

Espero ha sido útil. Última palabra: la pantalla está bloqueada durante toda la vida de la pantalla.


Si está buscando tener tres dígitos en forma de código de color RGB, el siguiente código debería hacer eso.

i = Image.open(path) pixels = i.load() # this is not a list, nor is it list()''able width, height = i.size all_pixels = [] for x in range(width): for y in range(height): cpixel = pixels[x, y] all_pixels.append(cpixel)

Esto puede funcionar para usted.


Usando Pillow (que funciona con Python 3.X y Python 2.7+), puede hacer lo siguiente:

from PIL import Image im = Image.open(''image.jpg'', ''r'') width, height = im.size pixel_values = list(im.getdata())

Ahora tienes todos los valores de píxel. Si es RGB u otro modo puede ser leído por im.mode . Entonces puedes obtener pixel (x, y) de la siguiente manera:

pixel_values[width*y+x]

Alternativamente, puede usar Numpy y remodelar la matriz:

>>> pixel_values = numpy.array(pixel_values).reshape((width, height, 3)) >>> x, y = 0, 1 >>> pixel_values[x][y] [ 18 18 12]

Una solución completa y fácil de usar es

def get_image(image_path): """Get a numpy array of an image so that one can access values[x][y].""" image = Image.open(image_path, ''r'') width, height = image.size pixel_values = list(image.getdata()) if image.mode == ''RGB'': channels = 3 elif image.mode == ''L'': channels = 1 else: print("Unknown mode: %s" % image.mode) return None pixel_values = numpy.array(pixel_values).reshape((width, height, channels)) return pixel_values


instale PIL usando el comando "sudo apt-get install python-imaging" y ejecute el siguiente programa. Imprimirá los valores RGB de la imagen. Si la imagen es grande, redirija el resultado a un archivo usando ''>'' y luego abra el archivo para ver los valores RGB.

import PIL import Image FILENAME=''fn.gif'' #image can be in gif jpeg or png format im=Image.open(FILENAME).convert(''RGB'') pix=im.load() w=im.size[0] h=im.size[1] for i in range(w): for j in range(h): print pix[i,j]


PyPNG - decodificador / codificador PNG ligero

Aunque la pregunta apunta a JPG, espero que mi respuesta sea útil para algunas personas.

A continuación, le mostramos cómo leer y escribir píxeles PNG utilizando el módulo PyPNG :

import png, array point = (2, 10) # coordinates of pixel to be painted red reader = png.Reader(filename=''image.png'') w, h, pixels, metadata = reader.read_flat() pixel_byte_width = 4 if metadata[''alpha''] else 3 pixel_position = point[0] + point[1] * w new_pixel_value = (255, 0, 0, 0) if metadata[''alpha''] else (255, 0, 0) pixels[ pixel_position * pixel_byte_width : (pixel_position + 1) * pixel_byte_width] = array.array(''B'', new_pixel_value) output = open(''image-with-red-dot.png'', ''wb'') writer = png.Writer(w, h, **metadata) writer.write_array(output, pixels) output.close()

PyPNG es un único módulo de Python puro de menos de 4000 líneas de longitud, incluidas pruebas y comentarios.

PIL es una biblioteca de imágenes más completa, pero también significativamente más pesada.


import matplotlib.pyplot as plt import matplotlib.image as mpimg img=mpimg.imread(''Cricket_ACT_official_logo.png'') imgplot = plt.imshow(img)


photo = Image.open(''IN.jpg'') #your image photo = photo.convert(''RGB'') width = photo.size[0] #define W and H height = photo.size[1] for y in range(0, height): #each pixel has coordinates row = "" for x in range(0, width): RGB = photo.getpixel((x,y)) R,G,B = RGB #now you can use the RGB value