python 读取并显示图片的两种方法
转自: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 读取并显示图片的两种方法相关推荐
- python 学习系列(3) 读取并显示图片的两种方法
python 读取并显示图片的两种方法 在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 mat ...
- python如何调用图片-python实现读取并显示图片的两种方法
在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. ...
- python图片-python实现读取并显示图片的两种方法
在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. ...
- python读取png图片只有一个图层_python实现读取并显示图片的两种方法
在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. ...
- plt 显示图片(两种方法)
1. PIL 读取图片 #!/usr/bin/python3 # coding:utf-8from PIL import Image import matplotlib.pyplot as plt# ...
- android显示图片的两种方法
第一种使用xml文件 1.新建android application 2.将要显示的图片img.png放到res/drawable-mdpi目录下 3.打开res/layout目录下的main.xml ...
- html中img显示图片的两种常用方式
html中img显示图片的两种常用方式 显示图片,尤其是二维码的时候,大都是自动生成的,所以就需要能够从后台返回字符串,前台浏览器进行解析.好了,下面是这两种方式. 1. <img src=&q ...
- 文章目录 图片元素 img元素 显示图片的两种写法: alt 属性 与a元素连用 map元素 和figure元素 figcaption 联用
文章目录 图片元素 img元素 显示图片的两种写法: alt 属性 与a元素连用 map元素 和figure元素 figcaption 联用 图片元素 img元素 image 缩写,空元素 src属性 ...
- 实时显示GPU的两种方法(灵机一动)
实时显示GPU的两种方法(灵机一动) 文章目录 实时显示GPU的两种方法(灵机一动) 命令行CMD 实时显示GPU Jupyter Notebook 实时显示GPU 最近在跑程序的时候,我在想能不能实 ...
- pyspark 读取csv文件创建DataFrame的两种方法
pyspark 读取csv文件创建DataFrame的两种方法 方法一:用pandas辅助 from pyspark import SparkContext from pyspark.sql impo ...
最新文章
- Python3不存在reduce函数
- python的assert(断言)异常步骤机制
- 自动化工程师与python_软件测试自动化工程师用案例带你进入Python数据类型,数据结构等代码实现...
- vba 将数组作为参数传递_将VBA数组写入工作表时转置(Transpose)的利用
- C++工作笔记-Windows下查找窗口句柄并让其显示在桌面
- php饿死,中国第一懒人:父母去世后,23岁的他饿死家中
- HDU 6168 Numbers 思维 水题
- 消息中间件学习总结(2)——RocketMQ之阿里开源消息中间件RocketMQ的前世今生
- MEF董事、中国电信云计算中心主任赵慧玲:MEF第三类网络
- java 含有package cmd_如何在命令提示符下编译运行含有Package的java文件
- android 技能 英文,讯飞输入法Android7.0.4050搭载音标输入神技能
- OSPF高等特性——Forwarding Address
- 从音视频技术看AI的机会和挑战
- ffplay flv mp4 转_利用 FFmpeg 将 MP4 转成 FLV
- Android Studio使用签名打包发布APP(安卓生成apk文件)
- 请出中本聪,迎接新世界(6-10)
- presto时间转换、时间加减、时间差
- listview连接mysql_ListView 数据库 C
- java pdf 转word源码_Java 实现word模板转为pdf
- 深度强化学习算法(朴素DQN,DDQN,PPO,A3C等)比较与实现
热门文章
- C语言多种格式输入乘法表,C语言:九九乘法表打印
- 《系统集成项目管理工程师》必背知识点
- 三星s4 android 5.0 root权限,三星S4(i9500)一键ROOT权限获取+USB驱动
- Dreamweaver简单网页——HTML+CSS小米官网首页的设计与实现
- 金税盘3.1、百旺V5、UKEY数据库
- CSR8311/CSR8811 HCI vendor command说明
- python opencv之cvtColor
- 轻灵高效的WizTree树
- 怎么让放大的图片变清晰?
- 最小二乘估计-LSE(Least Square Estimate)