PIL para el procesamiento de imágenes de Python


Prefacio

PIL (Python Imaging Library) es una biblioteca de procesamiento de imágenes de Python. En la actualidad, el desarrollo del proyecto PIL se ha detenido. La última actualización fue en 2011.
Énfasis: PIL no es compatible con Python 3.x

Pillow también es una biblioteca de procesamiento de imágenes para Python, que es diferente de PIL: Pillow es una versión específica del código PIL Fork, Pillow es compatible con la mayoría de los usos de PIL y se desarrolla activamente. Más importante aún, la biblioteca Pillow es compatible con Python 3.x , por lo que se recomienda la almohada.

  • instalación

pip instalar almohada

Inserte la descripción de la imagen aquí

Procesamiento básico de imágenes: PIL
Procesamiento avanzado de imágenes: Opencv


1. Uso de almohadas

1.1 Prueba de creación de imágenes

Pillow también puede crear una nueva imagen en blanco. El primer parámetro es el modo, que es el modo de espacio de color, el segundo parámetro especifica la resolución (ancho x alto) de la imagen y el tercer parámetro es el color.

  • Puede completar directamente los nombres de los colores más utilizados. Como 'rojo'
  • También puede completar el color representado por hexadecimal, como # FF00O para rojo.
  • También puede pasar tuplas, como (255, 0, 0, 255) o (255, 0, 0) para rojo.

1.2 Color y RGBA

RGB: Rojo Verde Azul Alfa (transparencia) La
computadora generalmente expresa la imagen como valor RGB, o agrega valor alfa (transparencia, transparencia), llamadoValor RGBA. En Pillow, el valor de RGBA se representa como una tupla que consta de 4 enteros, R, G, IB y A respectivamente. El rango de números enteros es 0 ~ 255. Todos los 0 en RGB pueden representar el negro y los 255 representan el negro. Se puede adivinar que
(255, 0, 0, 255) representa rojo, porque el componente R es el más grande y los componentes G y B son 0, por lo que aparece rojo.
Pero cuando el valor alfa es 0, no importa cuál sea el color, el color es invisible y puede entenderse como transparente .
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

En segundo lugar, siga los pasos

2.1 Prueba de lectura de imágenes

El código es el siguiente (ejemplo):

frim PIL import Image

image = Image.open("dog.png")
print(img.format)
print(img.mode)
print(img.size)
img.show() #show方法显示图片
  • Producción

PNG
RGB
(600 375)

Una imagen consta de tres colores, RGB (rojo, verde y azul) y los colores ternarios de Newton. La función ** split () ** puede descomponer una imagen en tres imágenes según el color, una imagen de un solo color Pantalla , el valor predeterminado es la imagen de visualización en escala de grises

r,g,b = img.spilt()
#单通道显示图像
b.show()

Inserte la descripción de la imagen aquí
Los tres colores que se dividieron originalmente se mezclan y se vuelven a combinar. El color de la imagen ha cambiado y la imagen verde original se ha convertido en una imagen roja.

# 打乱顺序,重新合并
img = Image.merge("RGB",(g,b,r))
img.show()

Inserte la descripción de la imagen aquí

2.2 Recortar imagen

La imagen tiene un método de recorte () que recibe una tupla de área rectangular (el orden es ( izquierda , arriba , derecha , abajo ). Devuelve un nuevo objeto de imagen, que es la imagen recortada, y no tiene ningún efecto en la imagen original.
El código es el siguiente (ejemplo):

cropimg = img.crop((100,100,400,400)) 
cropimg.show() 

Inserte la descripción de la imagen aquí

2.3 Copiar y pegar

La función de copia de imagen producirá una copia de la imagen original como sugiere su nombre, y cualquier operación en esta copia no afectará la imagen original. El método paste () se utiliza para pegar (superponer) una imagen encima de otra. Quien lo llame modificará directamente el objeto Imagen.
Inserte la descripción de la imagen aquí
Si la información de la imagen original se usará más tarde, es muy problemático porque se cambia la información. Por lo tanto, es mejor usar copy () para copiar una copia antes de pegar. La operación de copia no afectará la información de la imagen original. Aunque la información de la imagen original se ha cambiado en el programa, los otros nombres de archivo utilizados al guardar el archivo son equivalentes a que el cambio no tenga efecto, por lo que la imagen original permanece sin cambios cuando se ve.

2.4 Toma de fotografías de identificación para perros

Con el ancho y la altura de la imagen recortada como intervalo, se pegan continuamente en la copia en el bucle, que es un poco como tomar una foto de identificación.

El código es el siguiente (ejemplo):

# 截取狗狗图片区域
cropimg = img.crop((200,120,300,220))

crop_width, crop_height = cropimg.size
width,height = img.size

copyimg = img.copy() # 副本 copyimg = img
for left in range(0,width,crop_width):
	for top in range(0,height,crop_height):
		copyimg.past(cropimg,(left,top)) # 粘贴到copyimg
		
copyimg.show()

Inserte la descripción de la imagen aquí

2.5 Cambiar el tamaño de la imagen

cambiar el tamañoEl método devuelve un nuevo objeto Image con el ancho y alto especificados y acepta una tupla que contiene el ancho y el alto como parámetro. El valor de ancho y alto es un número entero.
Configure el ancho y el alto para que sean iguales, se convierte en una imagen cuadrada y la imagen se estira

El código es el siguiente (ejemplo):

width,height = img.size
resizeimg = img.resize((width,width))
resizeimg.show()

Inserte la descripción de la imagen aquí

2.6 Girar y voltear la imagen

girarDevuelve el nuevo objeto Imagen girado, manteniendo la imagen original sin cambios. Rotación en sentido antihorario.
guardar puede guardar directamente la imagen

El código es el siguiente (ejemplo):

img.rotate(90).save("rotate90.png")
img.rotate(270).save("rotate270.png")
img.rotate(20).save("rotate20.png")
img.rotate(180).save("rotate180.png")
  • Volteo de imagen en espejo
img.transport(Image.FLIP_LEFT_RIGHT).show()
img.transport(Image.FLIP_TOP_BOTTOM).show()

2.7 Filtrado de imágenes

Uso de almohadaImageFilterLas operaciones habituales, como el desenfoque de la imagen, la mejora de los bordes, la nitidez y el suavizado se pueden realizar fácilmente.

El código es el siguiente (ejemplo):

from PIL import ImageFilte

# 高斯模糊
image.filte(ImageFilter.GaussianBlur).show()
# 普通模糊
image.filte(ImageFilter.BlUR).show()
# 边缘增强
image.filte(ImageFilter.EDGE_ENHANCE).show()
# 找到边缘
image.filte(ImageFilter.FIND_EDGES).show()
# 浮雕
image.filte(ImageFilter.EMBOSS).show()
# 轮廓
image.filte(ImageFilter.CONTOUR).show()
# 锐化
image.filte(ImageFilter.SHARPER).show()
# 平滑
image.filte(ImageFilter.SMOOTH).show()
# 细节
image.filte(ImageFilter.DETAIL).show()

2.8 Módulo ImageDraw

El módulo ImageDraw proporciona la clase Draw, que puede realizar dibujos 2D simples en instancias de Image

  • Dibujar la función de pintura de la clase
  • acorde
  • arco
  • pastelitos en forma de abanico
  • elipse dibujar elipse
  • línea dibujar línea / polilínea
  • punto 点
  • polígono dibujar polígono
  • rectángulo dibujar rectángulo
  • texto texto

Tres, código de verificación chino

3.1 Imagen de fondo de color aleatorio

  • Biblioteca de referencia

de la imagen de importación PIL, la
importación de ImageDraw al azar

El código es el siguiente (ejemplo):

from PIL import Image,ImageDraw
import random

# 生成一张背景图,随机颜色

# 定义一个函数生成随机颜色
def randcolor():
    return (random.randint(0,255),random.randint(0,255),random.randint(0,255))

size = width,height = 240,60
img = Image.new('RGB',size,randcolor())#随机生成颜色

# 每个像素填充随机色
draw = ImageDraw.Draw(img) # 画笔
for x in range(width):
    for y in range(height):
        draw.point((x,y),fill=randcolor())

img.show()

Inserte la descripción de la imagen aquí

3.2 Fuente aleatoria

El código es el siguiente (ejemplo):

# 定义随机字库
chars = "百度新闻是包含海量资讯的新闻服务平台,真实反映每时每刻的新闻热点"

def randChar():
    return chars[random.randint(0,len(chars)-1)]

3.3 Procesamiento de desenfoque

El código es el siguiente (ejemplo):

......
font = ImageFont.truetype(r'C:\Windows\Fonts\SIMYOU.TTF',36,)
......

# 写字 (width/4 * i + 10 ,10)这是位置不断运行 不断调整
for i in range(4):
    draw.text((width/4 * i + 10 ,10),randChar(),font=font,fill=randcolor1())

# 普通模糊处理
img = img.filter(ImageFilter.BLUR)
  • Biblioteca de fuentes de Windows

Inserte la descripción de la imagen aquí

  • resultado de la operación
    Inserte la descripción de la imagen aquí

Código fuente

Supongo que te gusta

Origin blog.csdn.net/HG0724/article/details/113186934
Recomendado
Clasificación