python 读取并显示图片的两种方法

在 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()
(0)

相关推荐

  • python进阶—OpenCV之图像处理(一)

    文章目录 颜色空间转换 RGB色彩空间 HSV色彩空间 YUV色彩空间 简单的物体跟踪示例 HSV空间目标阈值选取 图像几何变换 图像的缩放 图像的位移 图像的旋转 图像的仿射 图像的投射 图像阈值( ...

  • 频域图像增强-锐化

    图像增强技术根据增强处理过程所在的空间不同,可分为基于频域的算法和基于空域的算法两大类.基于频域的算法是在图像的某种变换域内对图像的变换系数值进行某种修正,是一种间接增强的算法,把图像看成一种二维信号 ...

  • 边缘和轮廓检测——计算机视觉的应用

    计算机视觉的重点是从计算机中的视频和图像中提取有意义的信息.在本文中,我们将从初学者开始探索一个使用 OpenCV 的出色计算机视觉项目. 其标题是"使用计算机视觉进行边缘和轮廓检测&quo ...

  • 常见的图像处理技术

    重磅干货,第一时间送达 本期文章中,让我们一起来学习以下内容. 通过PIL和OpenCV来使用一些常见的图像处理技术,例如将RGB图像转换为灰度图像.旋转图像.对图像进行消噪.检测图像中的边缘以及裁剪 ...

  • 如何在机器学习中应用图像处理以及使用相对于的技术

    Processing 可以用来提高图像质量,或帮助你从图像中提取有用的信息.它在医学成像等领域很有用,甚至可以用于隐藏图像中的数据. 在本文中,我将告诉你有关如何在机器学习中应用图像处理以及可以使用的 ...

  • python+opencv图像处理(八)

    无所谓,谁会爱上谁... 无所谓,不能天天更... 只要是,不要一直断... -----------------------------------我是可爱的分割线 图像平移的意思就是将图像沿着x轴. ...

  • 基于OpenCV的图像强度操作

    重磅干货,第一时间送达 01. 什么是图像强度操作 更改任何通道中的像素值 对图像的数学运算 亮度变化 对比度变化 伽玛操纵 直方图均衡 图像预处理中的滤波等增强 使用OpenCV加载图像 impor ...

  • python+opencv图像处理(十四)

    图像直方图 1.灰度图像的直方图 灰度图像的直方图是灰度级和这种灰度级的概率之间关系的图形. 直接看图,下图中左侧是原图,右图为其直方图. 完整代码如下: import cv2 as cv impor ...

  • C# 将多个图片合并成TIFF文件的两种方法

    dotNET跨平台 今天 以下文章来源于WPF UI ,作者Gxy WPF UIWPF UI 设计,WPF教程,MVVM,C#程序设计~ 最近需要用到TIF格式的文件,研究了一段时间,终于有点结果了, ...

  • pdf怎么转换成jpg图片?分享两种方法给你

    pdf文件怎么转换成jpg图片呢?小编以前用的是PDF转换工具,但是今天想要给大家分享我新发现的迅捷图片转换器.不过,想到很多朋友没有看过以前小编的分享,所以今天我会将两种方法都告诉大家,大家可以认真 ...

  • WPS Office设置表格跨页显示同一表头的两种方法

    我们在利用WPS文档进行日常办公时,经常需要在文档中插入表格,插入表格后如果表格跨页显示,想要在每页都显示出表格的表头,该如何一键添加呢?今天我们就来教大家,在WPS文档中使表格跨页显示同一表头的两种 ...

  • PDF如何转图片?这里有两种方法,自行选择

    相较于PDF转word的操作,pdf转图片的操作知道的朋友会没有那么多.但其实这种pdf转图片的操作在生活中还蛮常用到的,像网上很多学习资料是pdf格式的文件,而为了便于更好的使用文件中的内容,也是有 ...

  • 不用购买硬件设备,两种方法在电脑上同步显示你手机屏幕

    移动学习是推动建设"人人皆学.处处能学.时时可学"的教育信息化体系的重要环节,因为移动互联网超时空.富资讯.强社交的特性可以与教育产业进行有机结合,打破原有线下教育的时空界限,方便 ...

  • 电脑系统显示乱码的两种解决办法

    有网友的电脑出了问题,系统的菜单,标题等处变成了乱码,到百度知道求助,提供了一张如下的乱码图片,希望得到解决.出现乱码的有几种情况,一是系统乱码,主要是桌面,菜单,标题,对话框等处出现乱码.二是文档中 ...

  • 如何在Word中插入圆角或圆角矩形图片?两种解答思路避开图片被压缩的情况

      牛闪闪办公第843个原创技巧 看看Zloffice社群的小伙伴这次遇到的问题,他想在Word文档中插入一个圆角矩形的图片,这样的效果是如何实现的呢?   一种思路是把图片处理成圆形或圆角矩形,再插 ...

  • 按指定次数重复显示,两种方法随意选

    先来看数据源和要实现的效果: 咱们的最终目的,是希望按照B列指定的次数,来重复显示A列的标签内容. 函数控们的方法是这样的: 在D2单元格中输入一大串公式,按住Ctrl+Shift不放,按回车,然后下 ...

  • 办公PS技巧09:图片放大不模糊的方法?分享两种方法,也许有用

    我想把图片放大不模糊,应该如何操作? 两种情况: 第一种是单色的图案或者图标(如图) 第二种是我们一般常见的位图(如图) 位图是什么:位图是我们常见到的一些图片,他不能被放大,放大就会模糊,常见格式有 ...