转自:http://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 np

lena = mpimg.imread('lena.png') # 读取和代码处于同一目录下的 lena.png
# 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理
lena.shape #(512, 512, 3)

plt.imshow(lena) # 显示图片
plt.axis('off') # 不显示坐标轴
plt.show()

2. 显示某个通道

# 显示图片的第一个通道
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()

3. 将 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()

4. 对图像进行放缩

这里要用到 scipy

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

5. 保存图像

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 misc
misc.imsave('lena_new_sz.png', lena_new_sz)

5.3 直接保存 array

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

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

二、PIL

1. 显示图片

from PIL import Image
im = Image.open('lena.png')
im.show()

2. 将 PIL Image 图片转换为 numpy 数组

im_array = np.array(im)
# 也可以用 np.asarray(im) 区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝

3. 保存 PIL 图片

直接调用 Image 类的 save 方法

from PIL import Image
I = Image.open('lena.png')
I.save('new_lena.png')

4. 将 numpy 数组转换为 PIL 图片

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

import matplotlib.image as mpimg
from PIL import Image
lena = mpimg.imread('lena.png') # 这里读入的数据是 float32 型的,范围是0-1
im = Image.fromarray(np.uinit8(lena*255))
im.show()

5. RGB 转换为灰度图

from PIL import Image
I = Image.open('lena.png')
I.show()
L = I.convert('L')
L.show()

python 读取并显示图片的两种方法相关推荐

  1. python 学习系列(3) 读取并显示图片的两种方法

    python 读取并显示图片的两种方法 在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 mat ...

  2. python如何调用图片-python实现读取并显示图片的两种方法

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

  3. python图片-python实现读取并显示图片的两种方法

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

  4. python读取png图片只有一个图层_python实现读取并显示图片的两种方法

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

  5. plt 显示图片(两种方法)

    1. PIL 读取图片 #!/usr/bin/python3 # coding:utf-8from PIL import Image import matplotlib.pyplot as plt# ...

  6. android显示图片的两种方法

    第一种使用xml文件 1.新建android application 2.将要显示的图片img.png放到res/drawable-mdpi目录下 3.打开res/layout目录下的main.xml ...

  7. html中img显示图片的两种常用方式

    html中img显示图片的两种常用方式 显示图片,尤其是二维码的时候,大都是自动生成的,所以就需要能够从后台返回字符串,前台浏览器进行解析.好了,下面是这两种方式. 1. <img src=&q ...

  8. 文章目录 图片元素 img元素 显示图片的两种写法: alt 属性 与a元素连用 map元素 和figure元素 figcaption 联用

    文章目录 图片元素 img元素 显示图片的两种写法: alt 属性 与a元素连用 map元素 和figure元素 figcaption 联用 图片元素 img元素 image 缩写,空元素 src属性 ...

  9. 实时显示GPU的两种方法(灵机一动)

    实时显示GPU的两种方法(灵机一动) 文章目录 实时显示GPU的两种方法(灵机一动) 命令行CMD 实时显示GPU Jupyter Notebook 实时显示GPU 最近在跑程序的时候,我在想能不能实 ...

  10. pyspark 读取csv文件创建DataFrame的两种方法

    pyspark 读取csv文件创建DataFrame的两种方法 方法一:用pandas辅助 from pyspark import SparkContext from pyspark.sql impo ...

最新文章

  1. Python3不存在reduce函数
  2. python的assert(断言)异常步骤机制
  3. 自动化工程师与python_软件测试自动化工程师用案例带你进入Python数据类型,数据结构等代码实现...
  4. vba 将数组作为参数传递_将VBA数组写入工作表时转置(Transpose)的利用
  5. C++工作笔记-Windows下查找窗口句柄并让其显示在桌面
  6. php饿死,中国第一懒人:父母去世后,23岁的他饿死家中
  7. HDU 6168 Numbers 思维 水题
  8. 消息中间件学习总结(2)——RocketMQ之阿里开源消息中间件RocketMQ的前世今生
  9. MEF董事、中国电信云计算中心主任赵慧玲:MEF第三类网络
  10. java 含有package cmd_如何在命令提示符下编译运行含有Package的java文件
  11. android 技能 英文,讯飞输入法Android7.0.4050搭载音标输入神技能
  12. OSPF高等特性——Forwarding Address
  13. 从音视频技术看AI的机会和挑战
  14. ffplay flv mp4 转_利用 FFmpeg 将 MP4 转成 FLV
  15. Android Studio使用签名打包发布APP(安卓生成apk文件)
  16. 请出中本聪,迎接新世界(6-10)
  17. presto时间转换、时间加减、时间差
  18. listview连接mysql_ListView 数据库 C
  19. java pdf 转word源码_Java 实现word模板转为pdf
  20. 深度强化学习算法(朴素DQN,DDQN,PPO,A3C等)比较与实现

热门文章

  1. C语言多种格式输入乘法表,C语言:九九乘法表打印
  2. 《系统集成项目管理工程师》必背知识点
  3. 三星s4 android 5.0 root权限,三星S4(i9500)一键ROOT权限获取+USB驱动
  4. Dreamweaver简单网页——HTML+CSS小米官网首页的设计与实现
  5. 金税盘3.1、百旺V5、UKEY数据库
  6. CSR8311/CSR8811 HCI vendor command说明
  7. python opencv之cvtColor
  8. 轻灵高效的WizTree树
  9. 怎么让放大的图片变清晰?
  10. 最小二乘估计-LSE(Least Square Estimate)