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 相关文章推荐
在Python程序中实现分布式进程的教程
Apr 28 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
举例讲解Python面向对象编程中类的继承
Jun 17 Python
TensorFlow入门使用 tf.train.Saver()保存模型
Apr 24 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
Python3 jupyter notebook 服务器搭建过程
Nov 30 Python
Django 自定义分页器的实现代码
Nov 24 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
解决python运行启动报错问题
Jun 01 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
Mar 03 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 Python
利用Python实现模拟登录知乎
May 25 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正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
5 cool javascript apps
2007/03/24 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
Python实现的tab文件操作类分享
2014/11/20 Python
pyshp创建shp点文件的方法
2018/12/31 Python
python迭代器常见用法实例分析
2019/11/22 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
Python collections模块的使用方法
2020/10/09 Python
python 高阶函数简单介绍
2021/02/19 Python
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
公司中秋节活动方案
2014/02/12 职场文书
献爱心倡议书
2014/04/14 职场文书
对教师的评语
2014/04/28 职场文书
2014组织生活会方案
2014/05/19 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
销售员态度差检讨书
2014/10/26 职场文书
2014年行风建设工作总结
2014/12/01 职场文书
《好妈妈胜过好老师》:每个孩子的优秀都是有源头的
2020/01/03 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang
浅析python中特殊文件和特殊函数
2022/02/24 Python
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
2022/09/23 HTML / CSS