Python 图像处理之PIL库详解用法

目录
  • 前言
  • 🍒PIL库概述
  • 🍓Image类解析
    • 💚图像的创建
    • 💙图像的属性
    • 💜图像的转换
    • 💗图像处理
  • 总结

前言

提示:以下是本篇文章正文内容

🍒PIL库概述

PIL库支持图像存储、 显示和处理, 它能够处理几乎所有图片格式, 可以完成
对图像的缩放、 剪裁、 叠加以及向图像添加线条、 图像和文字等操作

PIL库可以完成图像归档和图像处理两方面功能需求:
(1)图像归档:对图像进行批处理、 生成图像预览、 图像格式转换等

(2)图像处理:图像基本处理、 像素处理、 颜色处理等

🍓Image类解析

💚图像的创建

在PIL中, 任何一个图像文件都可以用Image对象表示Image类的图像读取和创建方法

方法 描述
Image.open(filename) 根据参数加载图像文件
Image.new(mode, size, color) 根据给定参数创建一个新的图像
Image.open(StringIO.StringIO(buffer)) 从字符串中获取图像
Image.frombytes(mode, size, data) 根据像素点data创建图像
Image.verify() 对图像文件完整性进行检查, 返回异常
from PIL import Image
im = Image.open(r"E:\Pycharm\Project\pictures\2049675.jpg")
im.show() // 显示

基本上如下图

💙图像的属性

属性 描述
Image.format 标识图像格式或来源, 如果图像不是从文件读取, 值是None
Image.mode 图像的色彩模式, "L"灰度图像、 "RGB"真彩色图像、 "CMYK"出版图像
Image.format 标识图像格式或来源, 如果图像不是从文件读取, 值是None
Image.size 图像宽度和高度, 单位是像素(px) , 返回值是二元元组(tuple)
Image.palette 调色板属性, 返回一个ImagePalette类型
from PIL import Image
im = Image.open(r"E:\Pycharm\Project\pictures\2049675.jpg")
im.show()
print(im.format,im.size)

# 结果
# JPEG (1920, 1080)

💜图像的转换

方法 描述
Image.save(filename, format) 将图像保存为filename文件名, format是图片格式
Image.convert(mode) 使用不同的参数, 转换图像为新的模式
Image.thumbnail(size) 创建图像的缩略图, size是缩略图尺寸的二元元组

jpg 转换成png

from PIL import Image
im = Image.open(r"E:\Pycharm\Project\pictures\2049675.jpg")
print(im)
im.save(r"E:\Pycharm\Project\pictures\2049675changed.png")
im = Image.open(r"E:\Pycharm\Project\pictures\2049675changed.png")
print(im)
im.show()

# 结果
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1920x1080 at 0x1A8DE865F40>
<PIL.PngImagePlugin.PngImageFile image mode=RGB size=1920x1080 at 0x1A8DE8D2E80>

GIF文件图像提取。
对一个GIF格式动态文件, 提取其中各帧图像, 并保存为文件

from PIL import Image
im = Image.open(r"E:\Pycharm\Project\pictures\21.gif") # 读入一个GIF文件
try:
    im.save('picframe{:02d}.png'.format(im.tell()))
    while True:
        im.seek(im.tell()+1)  # 帧的位置
        im.save('picframe{:02d}.png'.format(im.tell()))
except:
    print("处理结束")

结果

tell()方法:返回当前帧所处位置,从0开始计算

缩略图

from PIL import Image
im = Image.open(r"E:\Pycharm\Project\pictures\2050074.jpg")
print(im)
im.thumbnail((128, 99))
im.save("mm","JPEG")
print(im)
im.show()

# 结果
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=2757x2135 at 0x238DFCD5DC0>
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=128x99 at 0x238DFCD5DC0>

💗图像处理

1.Image类可以缩放和旋转图像, 其中, rotate()方法以逆时针旋转的角度值作
为参数来旋转图像。

方法 描述
Image.resize(size) 按size大小调整图像, 生成副本
Image.rotate(angle) 按angle角度旋转图像, 生成副本

2.Image类能够对每个像素点或者一幅RGB图像的每个通道单独进行操作,split()
方法能够将RGB图像各颜色通道提取出来, merge()方法能够将各独立通道再合成一幅新的图像。

方法 描述
Image.point(func) 根据函数func功能对每个元素进行运算, 返回图像副本
Image.split() 提取RGB图像的每个颜色通道, 返回图像副本
Image.merge(mode, bands) 合并通道 , 采用mode色彩, bands是新色的色彩通道
Image.blend(im1,im2,alpha) 将两幅图片im1和im2按照如下公式插值后生成新的图像:im1 * (1.0-alpha) + im2 * alpha

图像的颜色交换
交换图像中的颜色, 可以通过分离RGB图片的三个颜色通道实现颜色交换

from PIL import Image
im = Image.open(r"E:\Pycharm\Project\pictures\2050536.jpg") #打开文件
r, g, b = im.split() #获得RGB通道数据
newg = g.point(lambda i: i * 0.9) # 将G通道颜色值变为原来的0.9倍
newb = b.point(lambda i: i < 100) # 选择B通道值低于100的像素点
om = Image.merge(im.mode, (r, newg, newb)) # 将3个通道合形成新图像
om.save(r"E:\Pycharm\Project\pictures\aa.jpg") #输出图片
om.show()

原图:

交换后

3.图像的过滤和增强
PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法, 共10种

方法表示 描述
ImageFilter.BLUR 图像的模糊效果
ImageFilter.CONTOUR 图像的轮廓效果
ImageFilter.DETAIL 图像的细节效果
ImageFilter.EDGE_ENHANCE 图像的边界加强效果
ImageFilter.EDGE_ENHANCE_MORE 图像的阈值边界加强效果
ImageFilter.EMBOSS 图像的浮雕效果
ImageFilter.FIND_EDGES 图像的边界效果
ImageFilter.SMOOTH 图像的平滑效果
ImageFilter.SMOOTH_MORE 图像的阈值平滑效果
ImageFilter.SHARPEN 图像的锐化效果

轮廓效果

from PIL import Image
from PIL import ImageFilter
im = Image.open(r"E:\Pycharm\Project\pictures\2050558.jpg")
om = im.filter(ImageFilter.CONTOUR)
om.save('abc.jpg')
om.show()

原图:

修改后:

4.ImageEnhance类提供了更高级的图像增强需求, 它提供调整色彩度、 亮度、 对比度、 锐化等功能

方法 描述
ImageEnhance.enhance(factor) 对选择属性的数值增强factor倍
ImageEnhance.Color(im) 调整图像的颜色平衡
ImageEnhance.Contrast(im) 调整图像的对比度
ImageEnhance.Brightness(im) 调整图像的亮度
ImageEnhance.Sharpness(im) 调整图像的锐度

总结

提示:这里对文章进行总结:

到此这篇关于Python 图像处理之PIL库详解用法的文章就介绍到这了,更多相关Python 图像处理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python实现图片加文字水印OPenCV和PIL库

    目录 一:openCV给图片添加水印 二:使用PIL给图片添加水印 在python中我们可以使用openCV给图片添加水印,这里注意openCV无法添加汉字水印,添加汉字水印上可使用PIL库给图片添加水印 一:openCV给图片添加水印 1:安装openCV pip install opencv-python 2:使用openCV给图片添加水印实例: # -*- coding: utf-8 -*- import cv2 # 载入突破 img = cv2.imread('test.jpg') #

  • python读取并显示图片的三种方法(opencv、matplotlib、PIL库)

    前言 在进行图像处理时,经常会用到读取图片并显示出来这样的操作,所以本文总结了python中读取并显示图片的3种方式,分别基于opencv.matplotlib.PIL库实现,并给出了示例代码,介绍如下. OpenCV OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux.Windows.Android和Mac OS操作系统上. 它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python.Ruby.MATLAB等语言的接口

  • Python PIL库图片灰化处理

    2020年4月4日,是个特殊的日子,我们看到朋友圈很多灰化的图片.今天我们就聊聊图片灰度处理这事儿. PIL的基本概念: PIL中所涉及的基本概念有如下几个:通道(bands).模式(mode).尺寸(size).坐标系统(coordinate system).调色板(palette).信息(info)和滤波器(filters). PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了

  • Python编程利用Numpy和PIL库将图片转化为手绘

    目录 主要采用的技术点 读取图片,转化为数组 计算 x,y,z 轴梯度值,归一化 加入光源效果 导出图片,并保存 主要采用的技术点 Python + Numpy + PIL 在正文代码开始前,大家先看看最初原图和转换手绘风图片前后对比. 当然了,我先查了手绘的三个基本特点: 图片可单通道灰度图 边缘线条较重可当成黑色,相同或相近像素值趋向白色 光源效果下,灰度变化类似于人类视觉的远近 下面开始介绍,手绘照实现步骤: 读取图片,转化为数组 因为要对图像的像素计算,可以先把图片先转化为数组.代码如下

  • python图像处理基本操作总结(PIL库、Matplotlib及Numpy)

    一.PIL库对图像的基本操作 1.读取图片 PIL网上有很多介绍,这里不再讲解.直接操作,读取一张图片,将其转换为灰度图像,并打印出来. from PIL import Image import matplotlib.pyplot as plt pil_im = Image.open("empire.jpeg") pil_image = pil_im.convert("L") plt.gray() plt.imshow(pil_image) plt.show() 输

  • Python的PIL库中getpixel方法的使用

    getpixel函数是用来获取图像中某一点的像素的RGB颜色值,getpixel的参数是一个坐标点.对于图象的不同的模式,getpixel函数返回的值有所不同. 1.RGB模式 from PIL import Image im=Image.open('d:/22.jpg') print(im.mode) print(im.getpixel((0,0))) 结果为 RGB (149, 80, 41) 返回的是坐标点(0,0)处的red,green,blue的数值 2.P模式 from PIL im

  • python安装pil库方法及代码

    安装PIL 在Debian/Ubuntu Linux下直接通过apt安装: $ sudo apt-get install python-imaging Mac和其他版本的Linux可以直接使用easy_install或pip安装,安装前需要把编译环境装好: $ sudo easy_install PIL 如果安装失败,根据提示先把缺失的包(比如openjpeg)装上. Windows平台就去PIL官方网站下载exe安装包. 操作图像 来看看最常见的图像缩放操作,只需三四行代码: import I

  • Python基础之time库详解

    一.前言 time库运行访问多种类型的时钟,这些时钟用于不同的场景.本篇,将详细讲解time库的应用知识. 二.获取各种时钟 既然time库提供了多种类型的时钟.下面我们直接来获取这些时钟,对比其具体的用途.具体代码如下: import time print(time.monotonic()) print(time.monotonic_ns()) print(time.perf_counter()) print(time.perf_counter_ns()) print(time.process

  • 最强Python可视化绘图库Plotly详解用法

    今天给大家分享一篇可视化干货,介绍的是功能强大的开源 Python 绘图库 Plotly,教你如何用超简单的(甚至只要一行)代码,绘制出更棒的图表. 我之前一直使用 matplotlib ,由于它复杂的语法,我已经"沉没"在里面太多的时间成本.这也导致我花费了不知多少个深夜,在 StackOverflow 上搜索如何"格式化日期"或"增加第二个Y轴". 但我们现在有一个更好的选择了 ,比如易于使用.文档健全.功能强大的开源 Python 绘图库

  • Python爬虫之urllib库详解

    目录 一.说明: 二.urllib四个模块组成: 三.urllib.request 1.urlopen函数 2.response 响应类型 3.Request对象 4.高级请求方式 四.urllib.error 五.URL解析urllib.parse 六.urllib.robotparser 总结 一.说明: urllib库是python内置的一个http请求库,requests库就是基于该库开发出来的,虽然requests库使用更方便,但作为最最基本的请求库,了解一下原理和用法还是很有必要的.

  • Python图像处理之图像金字塔详解

    目录 一.图像金字塔原理 二.图像向上取样 三.图像向下取样 四.总结 一.图像金字塔原理 上一篇文章讲解的图像采样处理可以降低图像的大小,本文将补充图像金字塔知识,了解专门用于图像向上采样和向下采样的pyrUp()和pyrDown()函数. 图像金字塔是指由一组图像且不同分别率的子图集合,它是图像多尺度表达的一种,以多分辨率来解释图像的结构,主要用于图像的分割或压缩.一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合.如图10-1所示,它包括了四层图像,将

  • Python图像处理之边缘检测原理详解

    目录 原理 Sobel检测算子 Laplacian算子 算子比较 原理 边缘检测是图像处理和计算机视觉当中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点,图像的边缘检测可以大幅度的减少数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性,它们绝大多数可以分为两类:基于搜索和基于零穿越. 基于搜索:通过寻找图像一阶导数中max来检测边界,然后利用计算结果估计边缘的局部方向,通常采用梯度的方向,并在此方向找到局部梯度模的最大值,代表的算法是Sobel算子和Scharr算子.

  • 玩转Python图像处理之二值图像腐蚀详解

    目录 1 引言 2 腐蚀概念 3 举个栗子 4 水平腐蚀 4.1 理论基础 4.2 代码实现 5 垂直腐蚀 5.1 理论基础 5.2 代码实现 6 全方向腐蚀 6.1 理论基础 6.2 代码实现 7 总结 1 引言 形态学运算是针对二值图像依据数学形态学集合论方法发展起来的图像处理的方法.其主要内容是设计一整套的变换概念和算法,用以描述图像的基本特征. 在图像处理中,形态学的应用主要有以下两点:利用形态学的基本运算,对图像进行观察和处理,从而达到改善图像质量的目的;描述和定义图像的各种几何参数和

  • Python 命令行 prompt_toolkit 库详解

    目录 一. 使用 Bash 下常用快捷键 二. 实现查找历史命令 三. 根据历史输入自动提示 四. 实现输入的自动补全 Python 的第三方库 prompt_toolkit 用于打造交互式命令行,在交互式场景的使用中,prompt_toolkit 具有以下特点: 语法高亮 支持多行编辑 支持代码补全 支持自动提示 使用鼠标移动光标 支持查询历史 对 Unicode 支持良好 跨平台 支持 Emacs 与 Vi 风格的快捷键 prompt_toolkit 在使用前需要先进行安装: pip ins

  • python中的colorlog库详解

    一. 描述 colorlog.ColoredFormatter是一个Python logging模块的格式化,用于在终端输出日志的颜色 二. 安装 pip install colorlog 三. 用法 import colorlog handler = colorlog.StreamHandler() handler.setFormatter(colorlog.ColoredFormatter( '%(log_color)s%(levelname)s:%(name)s:%(message)s')

  • Python爬虫进阶之Beautiful Soup库详解

    一.Beautiful Soup库简介 BeautifulSoup4 是一个 HTML/XML 的解析器,主要的功能是解析和提取 HTML/XML 的数据.和 lxml 库一样. lxml 只会局部遍历,而 BeautifulSoup4 是基于 HTML DOM 的,会加载整个文档,解析 整个 DOM 树,因此内存开销比较大,性能比较低. BeautifulSoup4 用来解析 HTML 比较简单,API 使用非常人性化,支持 CSS 选择器,是 Python 标准库中的 HTML 解析器,也支

随机推荐