Almohada Python - Guía rápida
En el mundo digital actual, nos encontramos con muchas imágenes digitales. En caso de que estemos trabajando con el lenguaje de programación Python, proporciona muchas bibliotecas de procesamiento de imágenes para agregar capacidades de procesamiento de imágenes a las imágenes digitales.
Algunas de las bibliotecas de procesamiento de imágenes más comunes son: OpenCV, Python Imaging Library (PIL), Scikit-image, Pillow. Sin embargo, en este tutorial, solo nos enfocamos enPillow module e intentaremos explorar varias capacidades de este módulo.
Pillow está construido sobre PIL (Biblioteca de imágenes de Python). PIL es uno de los módulos importantes para el procesamiento de imágenes en Python. Sin embargo, el módulo PIL no es compatible desde 2011 y no es compatible con Python 3.
El módulo Pillow ofrece más funcionalidades, se ejecuta en todos los principales sistemas operativos y es compatible con Python 3. Admite una amplia variedad de imágenes como "jpeg", "png", "bmp", "gif", "ppm", "tiff". Puede hacer casi cualquier cosa con imágenes digitales utilizando el módulo de almohada. Además de la funcionalidad básica de procesamiento de imágenes, incluidas las operaciones puntuales, el filtrado de imágenes mediante núcleos de convolución integrados y las conversiones de espacio de color.
Archivos de imágenes
La biblioteca de imágenes de Python es más adecuada para aplicaciones de procesamiento por lotes y archivo de imágenes. El paquete de almohadas Python se puede utilizar para crear miniaturas, convertir de un formato a otro e imprimir imágenes, etc.
Visualización de imagen
Puede mostrar imágenes usando Tk PhotoImage, BitmapImage y la interfaz DIB de Windows, que se puede usar con PythonWin y otros kits de herramientas basados en Windows y muchos otros kits de herramientas de interfaz gráfica de usuario (GUI).
Para fines de depuración, existe un método show () para guardar la imagen en el disco que llama a la utilidad de visualización externa.
Procesamiento de imágenes
La biblioteca Pillow contiene toda la funcionalidad básica de procesamiento de imágenes. Puede cambiar el tamaño, la rotación y la transformación de la imagen.
El módulo de almohada le permite extraer algunos datos estadísticos de la imagen utilizando el método de histograma, que luego se puede usar para análisis estadístico y mejora automática del contraste.
Este capítulo explica cómo instalar el paquete de almohadas en su computadora.
Instalar el paquete de almohadas es muy fácil, especialmente si lo está instalando con pip.
Instalación de Pillow usando pip
Para instalar la almohada usando pip, simplemente ejecute el siguiente comando en su símbolo del sistema:
python -m pip install pip
python -m pip install pillow
En caso de que, si pip y pillow ya están instalados en su computadora, los comandos anteriores simplemente mencionarán el 'requirement already satisfied'como se muestra a continuación -
Para mostrar la imagen, la biblioteca de almohadas utiliza una clase de imagen dentro de ella. El módulo de imagen dentro del paquete de la almohada contiene algunas funciones incorporadas importantes como cargar imágenes o crear nuevas imágenes, etc.
Abrir, rotar y mostrar una imagen
Para cargar la imagen, simplemente importamos el módulo de imagen de la almohada y llamamos al Image.open(), pasando el nombre del archivo de la imagen.
En lugar de llamar al módulo Pillow, llamaremos al módulo PIL para que sea compatible con versiones anteriores de un módulo anterior llamado Python Imaging Library (PIL). Es por eso que nuestro código comienza con“from PIL import Image” en vez de “from Pillow import Image”.
A continuación, vamos a cargar la imagen llamando al Image.open() function, que devuelve un valor del tipo de datos del objeto Imagen. Cualquier modificación que hagamos en el objeto de imagen se puede guardar en un archivo de imagen con lasave()método. El objeto de imagen que recibimos usandoImage.open(), más tarde se puede utilizar para cambiar el tamaño, recortar, dibujar u otras llamadas a métodos de manipulación de imágenes en este objeto Imagen.
Ejemplo
El siguiente ejemplo demuestra la rotación de una imagen usando una almohada de Python:
from PIL import Image
#Open image using Image module
im = Image.open("images/cuba.jpg")
#Show actual Image
im.show()
#Show rotated Image
im = im.rotate(45)
im.show()
Salida
Si guarda el programa anterior como Example.py y lo ejecuta, muestra las imágenes originales y rotadas usando la utilidad de visualización PNG estándar, de la siguiente manera:
Actual image
Rotated image (45 degrees)
Atributos del módulo de imagen
La instancia de la clase Image tiene algunos atributos. Tratemos de entender algunos de ellos con el ejemplo:
Image.filename
Esta función se utiliza para obtener el nombre del archivo o la ruta de la imagen.
>>>image = Image.open('beach1.jpg')
>>> image.filename
'beach1.jpg'
Formato de imagen
Esta función devuelve el formato de archivo del archivo de imagen como 'JPEG', 'BMP', 'PNG', etc.
>>> image = Image.open('beach1.jpg')
>>>
>>> image.format
'JPEG'
Modo de imagen
Se utiliza para obtener el formato de píxeles utilizado por la imagen. Los valores típicos son “1”, “L”, “RGB” o “CMYK”.
>>> image.mode
'RGB'
Tamaño de la imagen
Devuelve la tupla que consta de la altura y el peso de la imagen.
>>> image.size
(1280, 721)
Ancho de la imagen
Devuelve solo el ancho de la imagen.
>>> image.width
1280
Altura de imagen
Devuelve solo la altura de la imagen.
>>> image.height
721
Image.info
Devuelve un diccionario que contiene datos asociados con la imagen.
>>> image.info
{'jfif': 257, 'jfif_version': (1, 1), 'dpi': (300, 300), 'jfif_unit': 1, 'jfif_density': (300, 300), 'exif': b"Exif\x00\x00MM\x00*\x00\x00\x00
....
....
\xeb\x00\x00'\x10\x00\x00\xd7\xb3\x00\x00\x03\xe8"}
Image.palette
Devuelve la tabla de la paleta de colores, si la hubiera.
>>> image.palette
Output above - Ninguno
Este capítulo trata sobre temas que incluyen cómo leer y guardar una imagen en Pillow.
Leer una imagen
Leer y escribir imágenes usando la biblioteca de almohadas es muy simple, con la ayuda de PIL.Image module function.
Sintaxis
Image.open(fp, mode=’r’)
Dónde
fp- Un nombre de archivo (cadena), pathlib.Path objeto o un objeto de archivo. El objeto de archivo debe implementar los métodos read (), seek () y tell () y debe abrirse en modo binario.
mode - Es un argumento opcional, si se proporciona, debe ser 'r'.
Return value - Un objeto de imagen.
Error - Si no se puede encontrar el archivo o la imagen no se puede abrir e identificar.
Ejemplo
A continuación se muestra un ejemplo muy sencillo, donde vamos a abrir una imagen de cualquier formato (estamos usando.jpg), mostrarlo en una ventana y luego guardarlo (ubicación predeterminada) con otro formato de archivo (.png).
from PIL import Image
image = Image.open('beach1.jpg')
image.show()
image.save('beach1.bmp')
image1 = Image.open('beach1.bmp')
image1.show()
En el ejemplo anterior, importamos el módulo Image de la biblioteca PIL y luego llamamos al Image.open()función para leer una imagen del disco, que devuelve un tipo de datos de objeto de imagen. Determinará automáticamente el tipo de archivo observando el contenido del archivo. Para leer, elopen() la función acepta un filename(string), un path object o un image(file) objeto.
Entonces, al usar la función open (), en realidad estamos leyendo la imagen. Image.open () leerá la imagen y obtendrá toda la información relevante de la imagen.
Salida
Si guarda el programa anterior como Example.py y lo ejecuta, muestra las imágenes originales (.jpg) y resguardadas (.bmp) utilizando la utilidad de visualización PNG estándar, de la siguiente manera:
Actual image
Resaved image (.bmp)
Guardar una imagen
La función save () escribe una imagen en un archivo. Al igual que para la lectura (función open ()), la función save () acepta un nombre de archivo, un objeto de ruta o un objeto de archivo que se ha abierto para escribir.
Sintaxis
Image.save(fp, format=None, **params)
Dónde,
fp - Un nombre de archivo (cadena), pathlib.Path objeto u objeto de archivo.
format- Anulación de formato opcional. Si se omite, el formato a utilizar se determina a partir de la extensión del nombre de archivo. Si se usó un objeto de archivo en lugar de un nombre de archivo, este parámetro siempre debe usarse.
options - Parámetros extra para el escritor de imágenes.
Return value - Ninguno
KeyError - Si el formato de salida no se pudo determinar a partir del nombre del archivo, use la opción de formato para resolver esto.
IOError - Si el archivo no se pudo escribir, es posible que se haya creado y que contenga datos parciales.
En resumen, la sintaxis anterior guardará la imagen con el nombre de archivo dado. Si no se especifica ningún formato, se basa en la extensión del nombre de archivo actual. Para proporcionar instrucciones adicionales al escritor, utilizamos opciones de palabras clave.
image.save('beach1.bmp')
En el ejemplo anterior, guarda el archivo basándose en la extensión del archivo para determinar el tipo de imagen, por ejemplo, lo anterior creará un archivo bmp en nuestro directorio de trabajo actual.
También puede especificar explícitamente el tipo de archivo como segundo parámetro:
image.save('beach1.gif', 'GIF')
A veces, se requiere tener todas las imágenes de igual altura y ancho. Una forma de lograr esto es creando una miniatura de todas las imágenes usando la función thumbnail () de la biblioteca de almohadas.
Este método modifica la imagen para que contenga una versión en miniatura de sí misma y el tamaño de la imagen no será mayor que el tamaño dado.
El método calcula un tamaño de miniatura apropiado para preservar el aspecto de la imagen, llama al draft () method para configurar el lector de archivos (en su caso) y finalmente, redimensionar la imagen.
Sintaxis
Image.thumbnail(size, resample=3)
Dónde,
Size - tamaño requerido
Resample- Filtro de remuestreo opcional. Puede ser uno de estos PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC o PIL.Image.LANCZOS. Si se omite, el valor predeterminado es PIL.Image.BICUBIC.
Returns - Ninguno
Ejemplo
El siguiente ejemplo demuestra la creación de una miniatura usando una almohada de Python:
from PIL import Image
def tnails():
try:
image = Image.open('images/cat.jpg')
image.thumbnail((90,90))
image.save('images/thumbnail.jpg')
image1 = Image.open('images/thumbnail.jpg')
image1.show()
except IOError:
pass
tnails()
Salida
Si guarda el programa anterior como Example.py y lo ejecuta, muestra la miniatura creada usando la utilidad de visualización PNG predeterminada, de la siguiente manera:
Original image
Output image
El paquete de almohadas te permite pegar una imagen sobre otra. La función merge () acepta un modo y una tupla de imágenes como parámetros y los combina en una sola imagen.
Sintaxis
Image.merge(mode, bands)
Dónde,
mode - El modo que se utilizará para la imagen de salida.
bands - Una secuencia que contiene una imagen de una sola banda para cada banda en la imagen de salida. Todas las bandas deben tener el mismo tamaño.
Return value - Objetos de una imagen.
Con la función merge (), puede fusionar las bandas RGB de una imagen como:
from PIL import Image
image = Image.open("beach1.jpg")
r, g, b = image.split()
image.show()
image = Image.merge("RGB", (b, g, r))
image.show()
Al ejecutar el fragmento de código anterior, puede ver la imagen original y la imagen fusionando las bandas RGB como se muestra a continuación:
Imagen de entrada
Imagen de salida
Fusionando dos imágenes
De la misma manera, para fusionar dos imágenes diferentes, necesita:
Cree un objeto de imagen para las imágenes requeridas utilizando la función open ().
Al fusionar dos imágenes, debe asegurarse de que ambas imágenes sean del mismo tamaño. Por lo tanto, obtenga cada tamaño de ambas imágenes y, si es necesario, cambie el tamaño en consecuencia.
Cree una imagen vacía usando la función Image.new ().
Pegue las imágenes usando la función pegar ().
Guarde y muestre la imagen resultante usando las funciones guardar () y mostrar ().
Ejemplo
El siguiente ejemplo demuestra la fusión de dos imágenes usando python pillow:
from PIL import Image
#Read the two images
image1 = Image.open('images/elephant.jpg')
image1.show()
image2 = Image.open('images/ladakh.jpg')
image2.show()
#resize, first image
image1 = image1.resize((426, 240))
image1_size = image1.size
image2_size = image2.size
new_image = Image.new('RGB',(2*image1_size[0], image1_size[1]), (250,250,250))
new_image.paste(image1,(0,0))
new_image.paste(image2,(image1_size[0],0))
new_image.save("images/merged_image.jpg","JPEG")
new_image.show()
Salida
Si guarda el programa anterior como Example.py y lo ejecuta, muestra las dos imágenes de entrada y la imagen combinada usando la utilidad de visualización PNG estándar, de la siguiente manera:
Imagen de entrada 1
Imagen de entrada 2
Imagen fusionada
Se puede difuminar una imagen reduciendo el nivel de ruido en la imagen aplicando un filtro a una imagen. El desenfoque de la imagen es uno de los aspectos importantes del procesamiento de imágenes.
los ImageFilter classen la biblioteca Pillow proporciona varios filtros de imagen estándar. Los filtros de imagen se pueden aplicar a una imagen llamando alfilter() method del objeto Image con el tipo de filtro requerido como se define en la clase ImageFilter.
Hay varias técnicas que se utilizan para desenfocar imágenes y vamos a discutir las técnicas mencionadas a continuación.
Desenfoque simple
Caja de desenfoque
desenfoque gaussiano
Todas estas tres técnicas utilizarán el método 'Image.filter ()' para aplicar el filtro a las imágenes.
Desenfoque simple
Aplica un efecto de desenfoque a la imagen como se especifica a través de un kernel específico o una matriz de convolución.
Sintaxis
filter(ImageFilter.BLUR)
Ejemplo
#Import required Image library
from PIL import Image, ImageFilter
#Open existing image
OriImage = Image.open('images/boy.jpg')
OriImage.show()
blurImage = OriImage.filter(ImageFilter.BLUR)
blurImage.show()
#Save blurImage
blurImage.save('images/simBlurImage.jpg')
Al ejecutar, el ejemplo anterior genera las dos ventanas de utilidad de visualización PNG estándar (en este caso, windows Photos aplicación).
Original image
Blurred image
Caja de desenfoque
En este filtro, usamos 'radio' como parámetro. El radio es directamente proporcional al valor de desenfoque.
Sintaxis
ImageFilter.BoxBlur(radius)
Dónde,
Radius - Tamaño de la caja en una dirección.
Radius 0 - significa que no hay borrosidad y devuelve la misma imagen.
RRadius 1 & minnus; toma 1 píxel en cada dirección, es decir, 9 píxeles en total.
Ejemplo
#Import required Image library
from PIL import Image,
#Open existing image
OriImage = Image.open('images/boy.jpg')
OriImage.show()
#Applying BoxBlur filter
boxImage = OriImage.filter(ImageFilter.BoxBlur(5))
boxImage.show()
#Save Boxblur image
boxImage.save('images/boxblur.jpg')
Salida
Al ejecutar, el ejemplo anterior genera las dos ventanas de utilidad de visualización PNG estándar (en este caso, la aplicación Fotos de Windows).
Original image
Blurred image
Desenfoque gaussiano
Este filtro también usa el radio de parámetro y hace el mismo trabajo que el desenfoque de cuadro con algunos cambios algorítmicos. En resumen, cambiar el valor del radio generará una intensidad diferente de imágenes de 'desenfoque gaussiano'.
Sintaxis
ImageFilter.GaussianBlur(radius=2)
Dónde,
Radio: radio de desenfoque
Ejemplo
#Import required Image library
from PIL import Image, ImageFilter
#Open existing image
OriImage = Image.open('images/boy.jpg')
OriImage.show()
#Applying GaussianBlur filter
gaussImage = OriImage.filter(ImageFilter.GaussianBlur(5))
gaussImage.show()
#Save Gaussian Blur Image
gaussImage.save('images/gaussian_blur.jpg')
Salida
Al ejecutar, el ejemplo anterior genera las dos ventanas de utilidad de visualización PNG estándar (en este caso, windows Photos aplicación).
Original image
Blurred image
El recorte es una de las operaciones importantes del procesamiento de imágenes para eliminar partes no deseadas de una imagen, así como para agregar las características necesarias a una imagen. Es un proceso muy utilizado en aplicaciones web para cargar una imagen.
La función crop () de la clase de imagen en Pillow requiere que la parte se recorte como un rectángulo. La parte del rectángulo que se recortará de una imagen se especifica como una tupla de cuatro elementos y devuelve la parte del rectángulo de la imagen que se ha recortado como un objeto de imagen.
Ejemplo
El siguiente ejemplo demuestra cómo rotar una imagen usando la almohada de Python:
#Import required Image library
from PIL import Image
#Create an Image Object from an Image
im = Image.open('images/elephant.jpg')
#Display actual image
im.show()
#left, upper, right, lowe
#Crop
cropped = im.crop((1,2,300,300))
#Display the cropped portion
cropped.show()
#Save the cropped image
cropped.save('images/croppedBeach1.jpg')
Salida
Si guarda el programa anterior como Example.py y lo ejecuta, muestra las imágenes originales y recortadas utilizando la utilidad de visualización PNG estándar, de la siguiente manera:
Imagen original
Imagen recortada
Mientras trabaja en imágenes utilizando la biblioteca de procesamiento de imágenes de Python, hay casos en los que necesita voltear una imagen existente para obtener más información, para mejorar su visibilidad o debido a sus requisitos.
El módulo de imagen de la biblioteca de almohadas nos permite voltear una imagen con mucha facilidad. Vamos a utilizar la función de transposición (método) del módulo Imagen para voltear las imágenes. Algunos de los métodos más comúnmente utilizados compatibles con 'transpose ()' son:
Image.FLIP_LEFT_RIGHT - Para voltear la imagen horizontalmente
Image.FLIP_TOP_BOTTOM - Para voltear la imagen verticalmente
Image.ROTATE_90 - Para rotar la imagen especificando grados
Ejemplo 1: imagen volteada horizontalmente
El siguiente ejemplo de Python lee una imagen, la voltea horizontalmente y muestra la imagen original y volteada usando la utilidad de visualización PNG estándar -
# import required image module
from PIL import Image
# Open an already existing image
imageObject = Image.open("images/spiderman.jpg")
# Do a flip of left and right
hori_flippedImage = imageObject.transpose(Image.FLIP_LEFT_RIGHT)
# Show the original image
imageObject.show()
# Show the horizontal flipped image
hori_flippedImage.show()
Salida
Original image
Flipped image
Ejemplo 2: imagen volteada verticalmente
El siguiente ejemplo de Python lee una imagen, la voltea verticalmente y muestra la imagen original y volteada usando la utilidad de visualización PNG estándar -
# import required image module
from PIL import Image
# Open an already existing image
imageObject = Image.open("images/spiderman.jpg")
# Do a flip of left and right
hori_flippedImage = imageObject.transpose(Image.FLIP_LEFT_RIGHT)
# Show the original image
imageObject.show()
# Show vertically flipped image
Vert_flippedImage = imageObject.transpose(Image.FLIP_TOP_BOTTOM)
Vert_flippedImage.show()
Salida
Original Image
Flipped Image
Ejemplo 3: girar la imagen a un grado específico
El siguiente ejemplo de Python lee una imagen, gira a un grado específico y muestra la imagen original y rotada usando la utilidad de visualización PNG estándar -
# import required image module
from PIL import Image
# Open an already existing image
imageObject = Image.open("images/spiderman.jpg")
# Do a flip of left and right
hori_flippedImage = imageObject.transpose(Image.FLIP_LEFT_RIGHT)
# Show the original image
imageObject.show()
#show 90 degree flipped image
degree_flippedImage = imageObject.transpose(Image.ROTATE_90)
degree_flippedImage.show()
Salida
Original Image
Rotated Image
La mayor parte de la imagen digital es un plano bidimensional de píxeles y tiene un ancho y un alto. El módulo de imagen de la biblioteca de almohadas tiene un tamaño de atributo. Esta tupla consta del ancho y alto de la imagen como sus elementos. Para cambiar el tamaño de una imagen, llame al método resize () de la clase de imagen de la almohada dando ancho y alto.
Cambiar el tamaño y guardar la imagen redimensionada
El programa para cambiar el tamaño y guardar la imagen redimensionada se da a continuación:
#Import required Image library
from PIL import Image
#Create an Image Object from an Image
im = Image.open("images/cat.jpg")
#Display actual image
im.show()
#Make the new image half the width and half the height of the original image
resized_im = im.resize((round(im.size[0]*0.5), round(im.size[1]*0.5)))
#Display the resized imaged
resized_im.show()
#Save the cropped image
resized_im.save('resizedBeach1.jpg')
Salida
Si guarda el programa anterior como Example.py y lo ejecuta, muestra las imágenes originales y redimensionadas utilizando la utilidad de visualización PNG estándar, de la siguiente manera:
Original Image
Resized Image
Ha notado que algunas de las fotos en línea tienen marcas de agua. La marca de agua es definitivamente una de las mejores formas de proteger sus imágenes del uso indebido. Además, se recomienda agregar una marca de agua a sus fotos creativas, antes de compartirlas en las redes sociales para evitar un uso indebido.
La marca de agua es generalmente un texto o logotipo superpuesto en la foto que identifica quién tomó la foto o quién posee los derechos de la foto.
El paquete de almohadas nos permite agregar marcas de agua a sus imágenes. Para agregar marca de agua a nuestra imagen, necesitamos“Image”, “ImageDraw” y “ImageFont” módulos del paquete de almohada.
El módulo 'ImageDraw' agrega funcionalidad para dibujar gráficos 2D en imágenes nuevas o existentes. El módulo 'ImageFont' se emplea para cargar archivos de fuentes de mapa de bits, TrueType y OpenType.
Ejemplo
El siguiente programa de Python demuestra cómo agregar una marca de agua a una imagen usando Python Pillow -
#Import required Image library
from PIL import Image, ImageDraw, ImageFont
#Create an Image Object from an Image
im = Image.open('images/boy.jpg')
width, height = im.size
draw = ImageDraw.Draw(im)
text = "sample watermark"
font = ImageFont.truetype('arial.ttf', 36)
textwidth, textheight = draw.textsize(text, font)
# calculate the x,y coordinates of the text
margin = 10
x = width - textwidth - margin
y = height - textheight - margin
# draw watermark in the bottom right corner
draw.text((x, y), text, font=font)
im.show()
#Save watermarked image
im.save('images/watermark.jpg')
Salida
Supongamos que la siguiente es la imagen de entrada boy.jpg ubicado en la imagen de la carpeta.
Después de ejecutar el programa anterior, si observa la carpeta de salida, puede ver el archivo watermark.jpg resultante con una marca de agua como se muestra a continuación:
los ImageFilter modulecontiene definiciones para un conjunto predefinido de filtros, que usamos con el método Image.filter (). Estos filtros se utilizan para cambiar la apariencia de la imagen.
Ejemplo
El siguiente ejemplo es el filtrado de una imagen:
from PIL import Image, ImageFilter
im = Image.open('jungleSaf2.jpg')
im1 = im.filter(ImageFilter.BLUR)
im1.show()
im2 = im.filter(ImageFilter.MinFilter(3))
im2.show()
im3 = im.filter(ImageFilter.MinFilter) # same as MinFilter(3)
im3.show()
En el programa anterior, hemos utilizado el MinFilter()método, que se utiliza para crear un filtro mínimo. Selecciona el valor de píxel más bajo en una ventana con el tamaño dado.
ImageFilter.MinFilter(size=3)
Dónde,
size - El tamaño del kernel, en píxeles.
Salida
Si guarda el programa anterior y lo ejecuta, muestra la imagen original, la imagen borrosa y la imagen borrosa con MinFilter usando la utilidad de visualización PNG estándar, de la siguiente manera:
Original Image
Blurred Image
Image blurred with mini filter
Filtros
La versión actual de la biblioteca de almohadas proporciona el conjunto de filtros de mejora de imagen predefinidos que se mencionan a continuación.
BLUR
CONTOUR
DETAIL
EDGE_ENHANCE
EDGE_ENHANCE_MORE
EMBOSS
FIND_EDGES
SHARPEN
SMOOTH
SMOOTH_MORE
Ejemplo
El siguiente ejemplo de Python aplica el filtro de desenfoque en una imagen, la guarda y la muestra usando la utilidad de visualización PNG estándar:
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(BLUR)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Salida
De la misma manera, al image.filter() método, puede pasar cualquiera de los siguientes parámetros para obtener las salidas respectivas:
CONTOUR
DETAIL
EDGE_ENHANCE
EDGE_ENHANCE_MORE
EMBOSS
FIND_EDGES
SMOOTH
SMOOTH_MORE
SHARPEN
Método de Python img.filter (CONTOUR)
El siguiente ejemplo de Python aplica el filtro CONTOUR a la imagen dada.
Ejemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(CONTOUR)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Salida
Si guarda el programa anterior y lo ejecuta, muestra la imagen original y la imagen filtrada utilizando la utilidad de visualización PNG estándar, de la siguiente manera:
Original image
Filtered image
Método Python img.filter (DETAIL)
El siguiente ejemplo de Python aplica el filtro DETAIL a la imagen dada.
Ejemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(DETAIL)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Salida
Si guarda el programa anterior y lo ejecuta, muestra la imagen original y la imagen filtrada utilizando la utilidad de visualización PNG estándar, de la siguiente manera:
Original image
Filtered image
Método de Python img.filter (EDGE_ENHANCE)
El siguiente ejemplo de Python aplica el filtro EDGE_ENHANCE a la imagen dada:
Ejemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(EDGE_ENHANCE)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Salida
Si guarda el programa anterior y lo ejecuta, muestra la imagen original y la imagen filtrada utilizando la utilidad de visualización PNG estándar, de la siguiente manera:
Original image
Filtered image
Método de Python img.filter (EDGE_ENHANCE_MORE)
El siguiente ejemplo de Python aplica el filtro EDGE_ENHANCE_MORE a la imagen dada.
Ejemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(EDGE_ENHANCE_MORE)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Salida
Si guarda el programa anterior y lo ejecuta, muestra la imagen original y la imagen filtrada utilizando la utilidad de visualización PNG estándar, de la siguiente manera:
Original image
Filtered image
Método de Python img.filter (EMBOSS)
El siguiente ejemplo de Python aplica el filtro EMBOSS a la imagen dada.
Ejemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(EMBOSS)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Salida
Si guarda el programa anterior y lo ejecuta, muestra la imagen original y la imagen filtrada utilizando la utilidad de visualización PNG estándar, de la siguiente manera:
Original image
Filtered image
Método python img.filter (FIND_EDGES)
El siguiente ejemplo de Python aplica el filtro FIND_EDGES a la imagen dada.
Ejemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(FIND_EDGES)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Salida
Si guarda el programa anterior y lo ejecuta, muestra la imagen original y la imagen filtrada utilizando la utilidad de visualización PNG estándar, de la siguiente manera:
Original image
Filtered image
Método python img.filter (SMOOTH)
El siguiente ejemplo de Python aplica el filtro SMOOTH a la imagen dada.
Ejemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(SMOOTH)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Salida
Si guarda el programa anterior y lo ejecuta, muestra la imagen original y la imagen filtrada utilizando la utilidad de visualización PNG estándar, de la siguiente manera:
Original image
Filtered image
Método de Python img.filter (SHARPEN)
El siguiente ejemplo de Python aplica el filtro SHARPEN a la imagen dada.
Ejemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(SHARPEN)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Salida
Si guarda el programa anterior y lo ejecuta, muestra la imagen original y la imagen filtrada utilizando la utilidad de visualización PNG estándar, de la siguiente manera:
Original image
Filtered image
El siguiente ejemplo de Python aplica el filtro SHARPEN a la imagen dada.
Ejemplo
#Import required image modules
from PIL import Image, ImageFilter
#Import all the enhancement filter from pillow
from PIL.ImageFilter import (
BLUR, CONTOUR, DETAIL, EDGE_ENHANCE, EDGE_ENHANCE_MORE,
EMBOSS, FIND_EDGES, SMOOTH, SMOOTH_MORE, SHARPEN
)
#Create image object
img = Image.open('images/cat.jpg')
#Applying the blur filter
img1 = img.filter(SHARPEN)
img1.save('images/ImageFilter_blur.jpg')
img1.show()
Salida
Si guarda el programa anterior y lo ejecuta, muestra la imagen original y la imagen filtrada utilizando la utilidad de visualización PNG estándar, de la siguiente manera:
Original image
Filtered image
los ImageColor El módulo contiene colores en diferentes formatos organizados en tablas y también contiene convertidores de especificadores de color de estilo CSS3 a tuplas RGB.
Nombres de colores
El módulo ImageColor admite los siguientes formatos de cadenas:
Especificadores de color hexadecimales, dados como #rgb o #rrggbb. Por ejemplo, # 00ff00 representa verde puro.
# 00ff00 color hexadecimal, el valor rojo es 0 (0% rojo), el valor verde es 255 (100% verde) y el valor azul de su RGB es 0 (0% azul).
Cilíndrico: representaciones de coordenadas (también conocidas como HSL) del color # 00ff00 tono: 0.33, saturación: 1.00 y también el valor de luminosidad de 00ff00 es 0.50.
El módulo Image Color proporciona alrededor de 140 nombres de colores estándar, basados en los colores admitidos por el sistema X Window y la mayoría de los navegadores web. Los nombres de los colores no distinguen entre mayúsculas y minúsculas.
Método ImageColor.getrgb ()
Convierta una cadena de colores en una tupla RGB. Si la cadena no se puede analizar, esta función genera una excepción ValueError.
Sintaxis
PIL.ImageColor.getrgb(color)
Dónde,
Argumentos: color - Una cadena de color
Valor de retorno: (rojo, verde, azul [, alfa])
Ejemplo 1
from PIL import ImageColor
# using getrgb
img = ImageColor.getrgb("blue")
print(img)
img1 = ImageColor.getrgb("purple")
print(img1)
Salida
(0, 0, 255)
(128, 0, 128)
Ejemplo 2
#Import required image modules
from PIL import Image,ImageColor
# Create new image & get color RGB tuple.
img = Image.new("RGB", (256, 256), ImageColor.getrgb("#add8e6"))
#Show image
img.show()
Salida
ImageColor. Método getcolor ()
Este método es el mismo que getrgb (), sin embargo, convierte el valor RGB a un valor de escala de grises, si el modo no lo es. Los comandos gráficos admiten el dibujo de formas y el color de anotaciones de texto o una imagen de paleta. Si la cadena no se puede analizar, esta función genera una excepción ValueError.
Sintaxis
PIL.ImageColor.getcolor(color, mode)
Dónde,
Argumentos: una cadena de colores
Valor de retorno: (nivel de gradación [, alfa]) o (rojo, verde, azul [, alfa])
Ejemplo
#Import required image modules
from PIL import Image,ImageColor
# using getrgb
img = ImageColor.getrgb("skyblue")
print(img)
img1 = ImageColor.getrgb("purple")
print(img1)
Salida
(135, 206, 235)
(128, 0, 128)
los ‘ImageDraw’El módulo proporciona soporte de gráficos 2D simple para Image Object. Generalmente, usamos este módulo para crear nuevas imágenes, anotar o retocar imágenes existentes y generar gráficos sobre la marcha para uso web.
Los comandos de gráficos admiten el dibujo de formas y la anotación de texto.
Una imagen puede estar bien pensada para que sea una matriz bidimensional de píxeles (elementos de imagen). Un píxel es el punto de color más pequeño que se admite.
El origen del sistema de coordenadas bidimensionales utilizado por ImageDraw, está en el upper left corner de la imagen.
Los esquemas de color de las almohadas que usamos son RGB. El módulo proporciona la representación y el soporte del color RGB.ImageColor.
mapa de bits, OpenType o TrueType son las fuentes aceptables para las anotaciones de texto.
La mayoría de los comandos de dibujo pueden requerir un parámetro de cuadro delimitador que especifique el área de la imagen a la que se aplicará el comando.
Una secuencia de coordenadas se puede representar como [(x0, y0), (x1, y1),… (xn, yn)].
Para algunos comandos de dibujo, necesitamos valores de ángulos.
Ejemplo
El siguiente ejemplo de Python dibuja una línea a través de la imagen dada:
#Import required libraries
import sys
from PIL import Image, ImageDraw
#Create Image object
im = Image.open("images/logo.jpg")
#Draw line
draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill=128)
draw.line((0, im.size[1], im.size[0], 0), fill=128)
#Show image
im.show()
Salida
Si guarda el programa anterior como Example.py y lo ejecuta, dibuja una línea a lo largo de la imagen y la muestra usando la utilidad de visualización PNG estándar, de la siguiente manera:
Lona
Un ImageDraw es una superficie dibujable Pillow (es decir, un lienzo) de una imagen.
ImageDraw.Draw (img) devuelve una representación de lienzo dibujable del parámetro Image img. El fondo del lienzo es la imagen "img".
Ejemplo
El siguiente ejemplo de Python dibuja texto en la imagen dada:
#Import required modules from Pillow package
from PIL import Image, ImageDraw, ImageFont
# get an image
base = Image.open('images/boy.jpg').convert('RGBA')
# make a blank image for the text, initialized to transparent text color
txt = Image.new('RGBA', base.size, (255,255,255,0))
# get a font
fnt = ImageFont.truetype('E:/PythonPillow/Fonts/Pacifico.ttf', 40)
# get a drawing context
d = ImageDraw.Draw(txt)
# draw text, half opacity
d.text((14,14), "Tutorials", font=fnt, fill=(255,255,255,128))
# draw text, full opacity
d.text((14,60), "Point", font=fnt, fill=(255,255,255,255))
out = Image.alpha_composite(base, txt)
#Show image
out.show()
Salida
Dibujar formas usando el módulo 'ImageDraw'
El módulo ImageDraw nos permite crear diferentes formas creando primero un objeto de dibujo con la imagen con la que desea trabajar y luego aplicándolo. Algunas de las formas comunes que podemos dibujar usando el módulo 'ImageDraw' son las siguientes:
Línea
A continuación, se muestra la sintaxis para dibujar una línea usando python pillow:
draw.line(xy, fill=None, width=0)
los line()El método dibuja una línea desde la esquina superior izquierda a la esquina inferior derecha del cuadro delimitador xy y el lienzo. La línea se rellena con relleno de color. Los valores predeterminados de Ninguno y 0, respectivamente, son para los parámetros relleno y ancho, que son opcionales.
Ejemplo
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.line((200, 100, 300, 200), fill=(0, 0, 0), width=10)
img.show()
Salida
Eclipse
A continuación, se muestra la sintaxis para dibujar una elipse usando python pillow:
draw.ellipse(xy, fill=None, outline=None)
los ellipse()El método dibuja la elipse rodeada por un cuadro delimitador xy al dibujar. La forma se rellena con relleno de color y el perímetro en contorno de color. Los valores predeterminados de Ninguno son para los parámetros relleno y ancho, que son opcionales.
Ejemplo
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.ellipse((200, 125, 300, 200), fill=(255, 0, 0), outline=(0, 0, 0))
img.show()
Salida
Rectángulo
A continuación, se muestra la sintaxis para dibujar un rectángulo usando la almohada de Python:
draw.rectangle(xy, fill=None, outline=None)
los rectangle()El método dibuja el rectángulo dado el cuadro delimitador xy en el dibujo. La forma se rellena con relleno de color y el perímetro en contorno de color. Los valores predeterminados de Ninguno son para los parámetros relleno y ancho, que son opcionales.
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.rectangle(
(200, 125, 300, 200),
fill=(255, 0, 0),
outline=(0, 0, 0))
img.show()
Salida
Polígono
A continuación, se muestra la sintaxis para dibujar un rectángulo usando la almohada de Python:
draw.polygon(seq, fill=None, outline=None)
los polygon()El método dibuja un polígono que conecta con líneas rectas las ubicaciones de la secuencia de coordenadas en la secuencia de dibujo. Las primeras y últimas coordenadas de la secuencia también están conectadas por una línea recta. La forma se rellena con relleno de color y el perímetro en contorno de color. Los parámetros de relleno y contorno son opcionales con valores predeterminados Ninguno.
from PIL import Image, ImageDraw
img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.polygon(
((200, 200), (300, 100), (250, 50)),
fill=(255, 0, 0),
outline=(0, 0, 0))
img.show()
Salida
La biblioteca de imágenes de Python (PIL) contiene soporte básico para secuencias de imágenes (formatos de animación). FLI / FLC, GIF y algunos formatos experimentales son los formatos de secuencia admitidos. Los archivos TIFF también pueden contener más de un fotograma.
Al abrir un archivo de secuencia, PIL carga automáticamente el primer fotograma de la secuencia. Para moverse entre diferentes fotogramas, puede utilizar los métodos de búsqueda e información.
from PIL import Image
img = Image.open('bird.jpg')
#Skip to the second frame
img.seek(1)
try:
while 1:
img.seek(img.tell() + 1)
#do_something to img
except EOFError:
#End of sequence
pass
Salida
raise EOFError
EOFError
Como podemos ver arriba, obtendrá una excepción EOFError cuando finalice la secuencia.
La mayoría de los controladores de la última versión de la biblioteca solo le permiten buscar el siguiente fotograma (como en el ejemplo anterior), para rebobinar el archivo, es posible que deba volver a abrirlo.
Una clase de iterador de secuencia
class ImageSequence:
def __init__(self, img):
self.img = img
def __getitem__(self, ix):
try:
if ix:
self.img.seek(ix)
return self.img
except EOFError:
raise IndexError # end of sequence
for frame in ImageSequence(img):
# ...do something to frame...
Puede escribir texto en imágenes pasando la ubicación del texto, el texto en sí y el color del texto. Podemos pasar muchos otros parámetros a este método.
Ejemplo
from PIL import Image, ImageDraw
img = Image.open(beach1.jpg')
d1 = ImageDraw.Draw(img)
d1.text((28, 36), "Hello, TutorialsPoint!", fill=(255, 0, 0))
img.show()
img.save("images/image_text.jpg")
Entrada
Salida
Si guarda el programa anterior como Example.py y lo ejecuta, agregará el texto dado y lo mostrará usando la utilidad de visualización PNG estándar, de la siguiente manera:
Seleccionar la fuente
Existen numerosas formas de seleccionar la fuente utilizada para escribir en la imagen. Podemos cargar fuentes directamente desde el sistema pasando la ruta completa a la función, o podemos usar ImageFont para cargar una fuente TrueType.
Ejemplo
from PIL import Image, ImageDraw, ImageFont
img = Image.open('images/logo.jpg')
d1 = ImageDraw.Draw(img)
myFont = ImageFont.truetype('E:/PythonPillow/Fonts/FreeMono.ttf', 40)
d1.text((0, 0), "Sample text", font=myFont, fill =(255, 0, 0))
img.show()
img.save("images/image_text.jpg")
Salida
En este capítulo, usamos numpy para almacenar y manipular datos de imágenes usando la biblioteca de imágenes de Python - "almohada".
Antes de continuar con este capítulo, abra el símbolo del sistema en modo administrador y ejecute el siguiente comando para instalar numpy:
pip install numpy
Note - Esto solo funciona si tiene PIP instalado y actualizado.
Creando imagen desde Numpy Array
Creando una imagen RGB usando PIL y guárdala como un archivo jpg. En el siguiente ejemplo:
Cree una matriz de 150 por 250 píxeles.
Llene la mitad izquierda de la matriz con naranja.
Llene la mitad derecha de la matriz con azul.
from PIL import Image
import numpy as np
arr = np.zeros([150, 250, 3], dtype=np.uint8)
arr[:,:100] = [255, 128, 0]
arr[:,100:] = [0, 0, 255]
img = Image.fromarray(arr)
img.show()
img.save("RGB_image.jpg")
Salida
Crear imágenes en escala de grises
La creación de imágenes en escala de grises es ligeramente diferente a la creación de una imagen RGB. Podemos usar la matriz bidimensional para crear una imagen en escala de grises.
from PIL import Image
import numpy as np
arr = np.zeros([150,300], dtype=np.uint8)
#Set grey value to black or white depending on x position
for x in range(300):
for y in range(150):
if (x % 16) // 8 == (y % 16)//8:
arr[y, x] = 0
else:
arr[y, x] = 255
img = Image.fromarray(arr)
img.show()
img.save('greyscale.jpg')
Salida
Creando una matriz numpy a partir de una imagen
Puede convertir la imagen PIL en una matriz numpy y viceversa. A continuación se indica un pequeño programa para demostrar lo mismo.
Ejemplo
#Import required libraries
from PIL import Image
from numpy import array
#Open Image & create image object
img = Image.open('beach1.jpg')
#Show actual image
img.show()
#Convert an image to numpy array
img2arr = array(img)
#Print the array
print(img2arr)
#Convert numpy array back to image
arr2im = Image.fromarray(img2arr)
#Display image
arr2im.show()
#Save the image generated from an array
arr2im.save("array2Image.jpg")
Salida
Si guarda el programa anterior como Example.py y ejecuta:
Muestra la imagen original.
Muestra la matriz recuperada.
Convierte la matriz nuevamente en imagen y la muestra.
Dado que hemos utilizado el método show (), las imágenes se muestran utilizando la utilidad de visualización PNG predeterminada, de la siguiente manera.
[[[ 0 101 120]
[ 3 108 127]
[ 1 107 123]
...
...
[[ 38 59 60]
[ 37 58 59]
[ 36 57 58]
...
[ 74 65 60]
[ 59 48 42]
[ 66 53 47]]
[[ 40 61 62]
[ 38 59 60]
[ 37 58 59]
...
[ 75 66 61]
[ 72 61 55]
[ 61 48 42]]
[[ 40 61 62]
[ 34 55 56]
[ 38 59 60]
...
[ 82 73 68]
[ 72 61 55]
[ 63 52 46]]]
Original Image
Image constructed from the array