前言

目录

文章目录

  • 前言
  • 目录
  • 正文
  • 一、matplotlib
  • 二、PIL

正文

##plt 同时显示多幅图像import matplotlib.pyplot as pltplt.figure()plt.subplot(1,2,1)plt.imshow(images[i])plt.subplot(1,2,2)plt.imshow(maskes[i])plt.show()

以下转自:https://www.cnblogs.com/yinxiangnan-charles/p/5928689.html

在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片。本人偏爱 matpoltlib,因为它的语法更像 matlab。

一、matplotlib

  1. 显示图片
import matplotlib.pyplot as plt # plt 用于显示图片import matplotlib.image as mpimg # mpimg 用于读取图片import numpy as nplena = mpimg.imread('lena.png') # 读取和代码处于同一目录下的 lena.png# 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理lena.shape #(512, 512, 3)plt.imshow(lena) # 显示图片plt.axis('off') # 不显示坐标轴plt.show()
  1. 显示某个通道
    # 显示图片的第一个通道lena_1 = lena[:,:,0]plt.imshow('lena_1')plt.show()# 此时会发现显示的是热量图,不是我们预想的灰度图,可以添加 cmap 参数,有如下几种添加方法:plt.imshow('lena_1', cmap='Greys_r')plt.show()img = plt.imshow('lena_1')img.set_cmap('gray') # 'hot' 是热量图plt.show()
  1. 将 RGB 转为灰度图

matplotlib 中没有合适的函数可以将 RGB 图转换为灰度图,可以根据公式自定义一个:

    def rgb2gray(rgb):return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])gray = rgb2gray(lena)    # 也可以用 plt.imshow(gray, cmap = plt.get_cmap('gray'))plt.imshow(gray, cmap='Greys_r')plt.axis('off')plt.show()
  1. 对图像进行放缩

这里要用到 scipy

    from scipy import misclena_new_sz = misc.imresize(lena, 0.5) # 第二个参数如果是整数,则为百分比,如果是tuple,则为输出图像的尺寸plt.imshow(lena_new_sz)plt.axis('off')plt.show()
  1. 保存图像

5.1 保存 matplotlib 画出的图像

该方法适用于保存任何 matplotlib 画出的图像,相当于一个 screencapture。

    plt.imshow(lena_new_sz)plt.axis('off')plt.savefig('lena_new_sz.png')

5.2 将 array 保存为图像

    from scipy import miscmisc.imsave('lena_new_sz.png', lena_new_sz)

5.3 直接保存 array

读取之后还是可以按照前面显示数组的方法对图像进行显示,这种方法完全不会对图像质量造成损失

    np.save('lena_new_sz', lena_new_sz) # 会在保存的名字后面自动加上.npyimg = np.load('lena_new_sz.npy') # 读取前面保存的数组

二、PIL

1. 显示图片from PIL import Imageim = Image.open('lena.png')im.show()
  1. 将 PIL Image 图片转换为 numpy 数组
    im_array = np.array(im)# 也可以用 np.asarray(im) 区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝
  1. 保存 PIL 图片

直接调用 Image 类的 save 方法

    from PIL import ImageI = Image.open('lena.png')I.save('new_lena.png')
  1. 将 numpy 数组转换为 PIL 图片

这里采用 matplotlib.image 读入图片数组,注意这里读入的数组是 float32 型的,范围是 0-1,而 PIL.Image 数据是 uinit8 型的,范围是0-255,所以要进行转换:

    import matplotlib.image as mpimgfrom PIL import Imagelena = mpimg.imread('lena.png') # 这里读入的数据是 float32 型的,范围是0-1im = Image.fromarray(np.uinit8(lena*255))im.show()
  1. RGB 转换为灰度图
    from PIL import ImageI = Image.open('lena.png')I.show()L = I.convert('L')L.show()

Python matplotlib 和PIL相关推荐

  1. 使用游戏角色娜可露露讲述Python图像处理的方法(matplotlib、PIL和OpenCV)

      Python中除了使用OpenCV以外,使用matplotlib和PIL这两个模块,也可以对图像进行处理. 一.matplotlib 1. 显示图片 import matplotlib.pyplo ...

  2. python如何将图片的像素矩阵绘制成图片(python,matplotlib):TypeError: Invalid shape (1, 28, 28) for image data

    矩阵变成图片,这个问题使用(python , matplotlib ) 可以轻松实现. import matplotlib.pyplot as plt #使用格式 plt.imshow(x)#其中x为 ...

  3. python matplotlib 显示图像

    python matplotlib 显示图像 首先需要import import os from PIL import Image import matplotlib.pyplot as plt 显示 ...

  4. Python matplotlib可视化:用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的外侧顶部)

    Python matplotlib可视化:用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的外侧顶部) 目录

  5. Python matplotlib可视化:在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)、水平条形图(horizontal bar)

    Python matplotlib可视化:在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等).水平条形图(horizontal bar) 目录

  6. Python matplotlib可视化:自定义轴标签格式化函数(在轴刻度上添加自定义的数值以及符号形式)、使用自定义函数在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)

    Python matplotlib可视化:自定义轴标签格式化函数(在轴刻度上添加自定义的数值以及符号形式).使用自定义函数在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等) 目 ...

  7. Python matplotlib可视化:用Matplotlib的bar_label函数自定义条形图的数值标签、用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的中部)

    Python matplotlib可视化:用Matplotlib的bar_label函数自定义条形图的数值标签.用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的中部) ...

  8. python matplotlib 简单用法

    python matplotlib 简单用法 具体内容请参考官网 代码 import matplotlib.pyplot as plt import numpy as np # 支持中文 plt.rc ...

  9. 老咸鱼今天告诉你用Python matplotlib 各种图绘制流线图,难怪老板放纵他

    复习回顾 在Python关于绘图,Mlab提供开源的matplotlib模块,不仅可以绘制折线图.柱状图.散点图等常规图外,还支持绘制量场图.频谱图.提琴图.箱型图等特殊图,例举往期文章可前往查看详情 ...

最新文章

  1. Linux命令行–更多bash shell命令(转)
  2. STM32F4读写内部FLASH【使用库函数】
  3. 从传统操作系统角度理解Hadoop YARN
  4. UTF-8, Unicode, GB2312格式串转换之C语言版
  5. 学习jQuery formValidator
  6. 3种设计模式的java小程序,java实现的设计模式小程序 模拟Web系统
  7. LeetCode每周刷题(2019.7.1-2019.7.7)
  8. 校准 Linux 服务器的时间
  9. HiJson软件改进之路(json格式化工具)
  10. XP系统时间同步和开启WindowsTime服务
  11. python为什么是蛇的天敌_青蛙和蛇一直是天敌,只知道蛇会吃青蛙,你知不知道青蛙也吃蛇...
  12. 【iOS】file not found: .../Build/Products/Debug-iphonesimulator file not found
  13. R语言报错:Error in data[[rowvar]] : attempt to select less than one element in get1index
  14. linux给红米note4x刷机,小米红米Note 4X线刷刷机教程_Note4X第三方rom系统刷机包
  15. 中国人为什么这么爱面子?
  16. 三维空间中的旋转--旋转向量
  17. 申请国家发明专利费用是多少?
  18. codeblocks关闭logsothers
  19. ArcMap进行专题地图编制
  20. iOS Safari阅读模式研究

热门文章

  1. Career Essentials from Career Service
  2. Oracle Exadata迈入十年将助企业迈向数位转型之路
  3. 基于LBS的热点店铺搜索
  4. LeetCode 23. Merge k Sorted Lists
  5. Intellij IDEA 神器那些让人爱不释手的小技巧
  6. javascript 迁移 typescript 实践
  7. USACO crypt1
  8. Linux下利用backtrace追踪函数调用堆栈以及定位段错误
  9. MySQLdb批量插入数据
  10. sql查询复习笔记-小技巧,大智慧(续一)