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 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
Python中常用操作字符串的函数与方法总结
Feb 04 Python
Python文件和流(实例讲解)
Sep 12 Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
python主线程捕获子线程的方法
Jun 17 Python
使用Python控制摄像头拍照并发邮件
Apr 23 Python
Python模块汇总(常用第三方库)
Oct 07 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 Python
scrapy头部修改的方法详解
Dec 06 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
Dec 08 Python
Python爬虫分析微博热搜关键词的实现代码
Feb 22 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网站基础优化方法小结
2008/09/29 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
thinkphp整合系列之极验滑动验证码geetest功能
2019/06/18 PHP
浅谈javascript的原型继承
2012/07/25 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
Python常见数字运算操作实例小结
2019/03/22 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
Python进行特征提取的示例代码
2020/10/15 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
aec加密 php_php aes加密解密类(兼容php5、php7)
2021/03/14 PHP
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
门市房租房协议书
2014/12/04 职场文书
后进生评语大全
2015/01/04 职场文书