Directorio de artículos
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
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 .
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()
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()
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()
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.
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()
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()
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()
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
- resultado de la operación