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


Posted in Python onJune 08, 2021

一、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库、Matplotlib及Numpy)

2、转换图片格式

PIL可以将图像保存为多种格式,下面将PNG格式文件保存为JPG格式:

from PIL import Image
import glob
import os
filelist = glob.glob("E:/pythonProject1/filelist/*.png")
for infile in filelist:
    outfile = os.path.splitext(infile)[0]+'.jpg'
 
    if infile  != outfile:
        try:
            Image.open(infile).save(outfile)
        except IOError:
            print("cannot convert", infile)

输出结果如下所示:

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

3、输出文件夹中所有图片的文件名列表

import os
def get_imlist(path):
    """返回目录中所有JPG图像的文件名列表"""
    return [os.path.join(path,f)for f in os.listdir(path) if f.endswith('.jpg')]
print(get_imlist("E:/pythonProject1/filelist/"))

输出为文件名列表

二、Matplotlib

1、绘制图像、点和线

from PIL import Image
from pylab import *
 
#读取图像到数组中
im = array(Image.open("empire.jpeg"))
 
#绘制图像
imshow(im)
 
#一些点
x = [100, 100, 400, 400]
y = [200, 500, 200, 500]
 
#使用红色星状标记绘制点
plot(x, y)#默认为蓝色实线
# plot(x, y, 'r*')#红色星状标记
# plot(x, y, 'go-')#带有圆圈标记的绿线
# plot(x, y, 'ks')#带有正方形标记的黑色虚线
 
#绘制连接前三个点的线
plot(x[:3], y[:3])
axis('off')
 
#添加标题,显示绘制的图像
titles = ['empire']
plt.title = titles
show()

上面的代码首先绘制出原始图像,然后在 x 和 y 列表中给定点的 x 坐标和 y 坐标上绘制出红色星状标记点,最后在两个列表表示的前两个点之间绘制一条线段。该例子的绘制结果下图:

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

2、图像轮廓和直方图

绘制轮廓需要对每个坐标 [x, y] 的像素值施加同一个阈值,所以首先需要将图像灰度化,这里用 PIL 的 convert() 方法将图像转换成灰度图像。图像的直方图用来表征该图像像素值的分布情况。

from PIL import Image
from pylab import *
 
# 读取图像到数组中
im = array(Image.open("empire.jpeg").convert('L'))
 
#创建一个图像
figure()
#不使用颜色信息
gray()
#在原点的左上角显示轮廓图像
contour(im, origin = 'image')#检测图像轮廓
axis('equal')
axis('off')
show()
#新建一个图像
figure
hist(im.flatten(), 128)#绘制图像直方图
show()

图像轮廓图输出如下所示:

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

输出图像直方图如下所示:

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

3、交互式标注

在一幅图像中标记一些点,或者标注一些训练数据。PyLab 库中的 ginput() 函数就可以实现交互式标注。在图像点击三次,则程序会自动将这3个点的坐标点[x, y]保存到x列表里。

from PIL import Image
from pylab import *
 
im = array(Image.open("empire.jpeg"))
imshow(im)
print("please click 3 points")
x = ginput(3)
print("you clicked",x)
show()

三、Numpy

1、图像数组表示

对于图像数据,下面的例子阐述了这一点

from PIL import Image
import numpy as np
 
im = np.array(Image.open("empire.jpeg"))
print(im.shape,im.dtype)

输出为:
(1024, 683, 3) uint8

 每行的第一个元组表示图像数组的大小(行、列、颜色通道),紧接着的字符串表示数组元素的数据类型。因为图像通常被编码成无符号八位整数(uint8),载入图像并将其转换到数组中,数组的数据类型为“uint8”。

2、灰度变换

对图像进行灰度变换,如下所示:

from PIL import Image
import numpy as np
 
im = np.array(Image.open("empire.jpeg"))
print(im.shape,im.dtype)
 
from PIL import Image
from matplotlib.pylab import plt
from numpy import *
 
im1 = array(Image.open('empire.jpeg').convert('L'))
im2 = 255 - im1 #对图像进行反向处理
im3 = (100.0/255) * im1 + 100 #将图像值变换到100-200之间
im4 = 255.0 * (im1/255) ** 2 #对图像像素值求平方后得到的图像
 
images = [im1, im2, im3, im4]
titles = ["f(x) = x", "f(x) = 255 - x", "f(x) = (100/255)*x +100", "f(x) = 255*(x/255)^2"]
#输出图中的最大像素值和最小像素值
print(int(im1.min()),int(im1.max()))
print(int(im2.min()),int(im2.max()))
print(int(im3.min()),int(im3.max()))
print(int(im4.min()),int(im4.max()))
 
for i in range(4):
    plt.subplot(2, 2, i+1)#2行2列,按编号顺序排列
    plt.imshow(images[i])#显示图像
    plt.title(titles[i])#显示标题
    plt.gray()
    # plt.xticks([])
    # plt.yticks([])
    plt.axis('equal')
    plt.axis('off')
plt.show()

输出接入如下所示:

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

总结

到此这篇关于python图像处理基本操作的文章就介绍到这了,更多相关python图像处理操作内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
pycharm 使用心得(九)解决No Python interpreter selected的问题
Jun 06 Python
python根据文件大小打log日志
Oct 09 Python
简单介绍Python中的decode()方法的使用
May 18 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
在Python中增加和插入元素的示例
Nov 01 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
Python pysnmp使用方法及代码实例
Aug 24 Python
python之django路由和视图案例教程
Jul 26 Python
python对文档中元素删除,替换操作
Apr 02 Python
Django drf请求模块源码解析
Python中OpenCV实现查找轮廓的实例
python字符串的多行输出的实例详解
Jun 08 #Python
Python机器学习之基于Pytorch实现猫狗分类
Python中json.load()和json.loads()有哪些区别
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 #Python
OpenCV-Python直方图均衡化实现图像去雾
You might like
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
动态控制Table的js代码
2007/03/07 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
7个JS基础知识总结
2014/03/05 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
vue.js获取数据库数据实例代码
2017/05/26 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
普通大学毕业生自荐信范文
2014/02/23 职场文书
合伙经营协议书
2014/04/18 职场文书
汽车维修求职信
2014/06/15 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
就业推荐表自我评价范文
2015/03/02 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
Pytorch中的数据集划分&正则化方法
2021/05/27 Python
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS