Python图像处理之Pillow库

编程入门 行业动态 更新时间:2024-10-13 00:37:43

Python<a href=https://www.elefans.com/category/jswz/34/1769353.html style=图像处理之Pillow库"/>

Python图像处理之Pillow库

Python图像处理

    • 1、图像处理概述
      • 1.1、Pillow库简介
      • 1.2、什么是图像
    • 2、Pillow库图像常用操作
    • 3、Pillow库的Image模块
    • 4、案例:给图像添加水印
      • 4.1、单个水印(右下角水平方向)
      • 4.2、自定义扩展水印
        • 4.2.1、filestools模块
        • 4.2.2、自定义扩展水印
    • 5、Python图像文字识别

1、图像处理概述

1.1、Pillow库简介

  • PIL(Python Image Library)是Python提供的图像处理标准库,来满足开发者处理图像的各种功能

  • PIL支持的图像文件格式包括JPEG、PNG、GIF等,它提供了图像创建、图像显示、图像处理等功能;但是Python2.7后不再支持

  • Pillow是基于PIL模块Fork的一个派生分支,如今已经发展成为比PIL本身更具活力的图像处理库,Pillow模块支持python3

  • Pillow库是一个非常强大的基础图像处理库,是计算机图像识别的基础,主要模块有:Image模块、ImageChops通道操作模块)、ImageColor颜色转换模块、ImageDraw二维图形模块等

Pillow参考学习网站:/

安装:

pip install Pillow==9.5.0

1.2、什么是图像

图像具有如下基本概念:深度(Depth)、通道(Bands)、模式(Mode)、坐标系(Coordinate System)等

1)深度(Depth)

深度是指图像中像素点占得Bit位数

二值图像: 图像的像素点不是0就是1(图像不是黑色就是白色),图像像素点占的位数是1位,图像的深度是1,也称位图

灰度图像: 图像的像素点位于0-255之间(0代表全黑,255代表全白),在0-255之间插入了28=255个等级的灰度,图像像素点占的位数是8位,图像的深度是8

2)通道(Bands)

每张图像都是由一个或多个数据通道构成

RGB是基本的三原色(红色、绿色和蓝色),如果用8位代表一种颜色,那么每种颜色的最大值是255,这样每个像素点的颜色值范围就是(0-255,0-255,0-255),图像的通道是3,而灰度图像的通道是1

3)模式(Mode)

图像实际上是像素数据的矩形图,图像的模式定义了图像中像素的类型和深度

常见的模式有:

  • 1:1位像素,表示黑和白,占8bit像素,在图像表示中称为位图
  • L:表示黑白之间的灰度,占8bit像素
  • P:8bit像素,使用调色版映射
  • RGB:真彩色,占用3x8位像素,其中R为红色,G为绿色,B为蓝色,三原色叠加形成的色彩变化,如三通道都为0则代表黑色,都为255则代表白色
  • RGBA:带透明蒙版的真彩色,其中的A为alpha透明度,占用4x8位像素

4)坐标系(Coordinate System)

PIL中图像的坐标是从左上角开始,向右下角延伸,以二元组(x,y)的形式传递,x轴从左到右,y轴从上到下,即左上角的坐标为(0, 0),因此矩形图像使用四元组表示,例如一个450x450像素的矩形图像可以表示为(0, 0, 450, 450)

2、Pillow库图像常用操作

from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
import requests

1) 打开图像

'''
Image.open(file,mode)
mode:默认r可读
'''
# 1)打开图像文件
img1 = Image.open(r'C:\Users\cc\Desktop\cat.png')
# 2)从文件流中打开图像
resp = requests.get(r'.jpg')
img2 = Image.open(BytesIO(resp.content))# 展示图像
img1.show()
img2.show()# 图像旋转(逆时针)
img1.rotate(90).show()

2) 创建图像

'''
Image.new(mode,size,color)
mode:模式  size:大小(宽高),二元组类型,单位像素  color:颜色,可以使用颜色名、16进制或RGB数字
'''
img3 = Image.new('RGB', (450, 450), (255, 0, 0))
img3.show()

3) 转换格式(保存图像)

'''
Image.save(file)
'''
# 查看图像类型格式
print(img1.format)
# 另存为JPG类型的图片
img1.save(r'C:\Users\cc\Desktop\cat_f.jpg')
# 打开保存的图片
img4 = Image.open(r'C:\Users\cc\Desktop\cat_f.jpg')
# 查看图像类型格式
print(img4.format)

4) 创建缩略图(图像缩放)

'''
mage.thumbnail(size, resample=3)
size:最终图像大小,元组类型  resample:过滤器,滤波器
'''

修改当前图像制作成缩略图,该缩略图尺寸不大于给定的图像尺寸

# 缩放图像
img4.thumbnail((128, 128), Image.LANCZOS)
# 展示图像
img4.show()

5) 融合图像

'''
Image.blend(image1, image2, alpha)
'''

将图像image1和图像image2根据alpha值进行融合,公式为:

out = image1 * (1.0 - alpha) + image2 * alpha

image1和image2表示两个大小和模式相同的图像,alpha介于0和1之间;若alpha为0,则返回image1图像,若alpha为1,则返回image2图像

# 蓝色图像
image1 = Image.new('RGB', (128, 128), (0, 0, 255))
# 红色图像
image2 = Image.new('RGB', (128, 128), (255, 0, 0))
# 取中间值
img5 = Image.blend(image1, image2, 0.5)
image1.show()
image2.show()
# 显示紫色图像
img5.show()

6)

更多推荐

Python图像处理之Pillow库

本文发布于:2024-03-12 04:07:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1730659.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图像处理   Python   Pillow

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!