python imread函数详解

 更新时间:2021年08月16日 10:20:19   作者:walter_xh  
这篇文章主要介绍了python imread函数详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

Python 中各种imread函数的区别与联系

最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误。如果你正好也对此感到困惑可以看下这篇总结。当然,要了解具体的细节,还是应该 read the fuck codeAPI document,但貌似python的很多模块文档都不是很全,所以只能多看代码和注释了。

先来看看常用的读取图片的方式:

  • PIL.Image.open
  • scipy.misc.imread
  • scipy.ndimage.imread
  • cv2.imread
  • matplotlib.image.imread
  • skimge
  • caffe.io.load_iamge

这些方法可以分为四大家族

PIL

PIL.Image.open + numpy
scipy.misc.imread
scipy.ndimage.imread

这些方法都是通过调用PIL.Image.open 读取图像的信息;
PIL.Image.open 不直接返回numpy对象,可以用numpy提供的函数进行转换,参考Image和Ndarray互相转换;
其他模块都直接返回numpy.ndarray对象,通道顺序为RGB,通道值得默认范围为0-255。

matplotlib

matplot.image.imread

从名字中可以看出这个模块是具有matlab风格的,直接返回numpy.ndarray格式通道顺序是RGB,通道值默认范围0-255。

opencv

cv2.imread

使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR注意是BGR,通道值默认范围0-255。

skimage

skimage.io.imread: 直接返回numpy.ndarray 对象,通道顺序为RGB,通道值默认范围0-255。
caffe.io.load_image: 没有调用默认的skimage.io.imread,返回值为0-1的float型数据,通道顺序为RGB

关于图像的一些说明

可以使用matplotlib的pyplot模块的show也可以使用cv2的imshow方法,对于这些方法只要你传入的参数是numpy.ndarray(通道值范围0-255) 就可以正常显示,不存在区别,这也可以看出numpy在python中的重要地位;但是cv2.imshow方法由于它针对的是cv2的imread 所以它内部会做通道顺序的变化,传入为BGR转换为RGB,所以你如果传入RGB显示的就是BGR了。废话说完了,看代码。

以下是测试代码

运行环境为windows10+python3.6

#encoding=utf8
from PIL import Image
import numpy as np
import cv2
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import skimage
import sys
from skimage import io 

#PIL
#相关:scipy.misc.imread, scipy.ndimage.imread
#misc.imread 提供可选参数mode,但本质上是调用PIL,具体的模式可以去看srccode或者document
#https://github.com/scipy/scipy/blob/v0.17.1/scipy/misc/pilutil.py
imagepath='test1.jpg'
im1=Image.open(imagepath)
im1=np.array(im1)#获得numpy对象,RGB
print(type(im1))
print(im1.shape)

#2 opencv 
im2=cv2.imread(imagepath)
print(type(im2))#numpy BGR
print(im2.shape)#[width,height,3]

#3 matplotlib 类似matlab的方式
im3 = mpimg.imread(imagepath)
print(type(im3))#np.array
print(im3.shape)

#4 skimge 
#caffe.io.load_iamge()也是调用的skimage实现的,返回的是0-1 float型数据
im4 = io.imread(imagepath)
print(type(im4))#np.array
print(im4.shape)
#print(im4)


# cv2.imshow('test',im4)
# cv2.waitKey()
#统一使用plt进行显示,不管是plt还是cv2.imshow,在python中只认numpy.array,但是由于cv2.imread 的图片是BGR,cv2.imshow 时相应的换通道显示
plt.subplot(221)
plt.title('PIL read')
plt.imshow(im1)
plt.subplot(222)
plt.title('opencv read')
plt.imshow(im2)
plt.subplot(223)
plt.title('matplotlib read')
plt.imshow(im3)
plt.subplot(224)
plt.title('skimage read')
plt.imshow(im4)
#plt.axis('off') # 不显示坐标轴
plt.show()

##################################### cmd output################################
# <class 'numpy.ndarray'>
# (851, 1279, 3)
# <class 'numpy.ndarray'>
# (851, 1279, 3)
# <class 'numpy.ndarray'>
# (851, 1279, 3)
# <class 'numpy.ndarray'>
# (851, 1279, 3)

测试结果

这里写图片描述

总结

虽然python中没有显示的数据类型声明,但是在编程的过程中自己必须得清楚数据类型是什么,否则就有可能犯一些愚蠢的错误。

到此这篇关于python imread函数详解的文章就介绍到这了,更多相关python imread函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python自动登录126邮箱的方法

    Python自动登录126邮箱的方法

    这篇文章主要介绍了Python自动登录126邮箱的方法,涉及Python针对邮箱操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • python numpy 中linspace函数示例详解

    python numpy 中linspace函数示例详解

    这篇文章主要介绍了python numpy 中linspace函数,本文我们通过示例学习了linspace函数,如果你熟悉NumPy,一定也注意到还有np.arange函数,两者最大差异是,linspace能够精确控制终止值终值,而arange能够更直接地控制序列中值之间的增量,需要的朋友可以参考下
    2023-03-03
  • PyTorch中torch.matmul()函数常见用法总结

    PyTorch中torch.matmul()函数常见用法总结

    torch.matmul()也是一种类似于矩阵相乘操作的tensor连乘操作。但是它可以利用python中的广播机制,处理一些维度不同的tensor结构进行相乘操作,这篇文章主要介绍了PyTorch中torch.matmul()函数用法总结,需要的朋友可以参考下
    2023-04-04
  • python中dict()的高级用法实现

    python中dict()的高级用法实现

    这篇文章主要介绍了python中dict()的高级用法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Python中super()函数简介及用法分享

    Python中super()函数简介及用法分享

    本文给大家分享的是Python中的super函数的简单介绍以及用法和注意事项,有需要的小伙伴可以参考下
    2016-07-07
  • 五个简单有效的Python清理数据脚本分享

    五个简单有效的Python清理数据脚本分享

    通常情况下,在机器学习中的数据清理往往是一件令人头疼的事情,本文整理了一份清单,列出了5个常用的Python脚本,用于自动化数据清理,需要的可以参考一下
    2022-09-09
  • python去掉字符串中重复字符的方法

    python去掉字符串中重复字符的方法

    这篇文章主要介绍了python去掉字符串中重复字符的方法,需要的朋友可以参考下
    2014-02-02
  • Python实现MySql数据库交互的示例

    Python实现MySql数据库交互的示例

    本文主要介绍了Python实现MySql数据库交互的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 浅谈python字符串方法的简单使用

    浅谈python字符串方法的简单使用

    下面小编就为大家带来一篇浅谈python字符串方法的简单使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • python 实现查询Neo4j多节点的多层关系

    python 实现查询Neo4j多节点的多层关系

    今天小编就为大家分享一篇python 实现查询Neo4j多节点的多层关系,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12

最新评论