• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python imread函数详解

python 搞代码 4年前 (2022-01-07) 36次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了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的来源gaodai$ma#com搞$代*码*网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-600' 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################################ #  # (851, 1279, 3) #  # (851, 1279, 3) #  # (851, 1279, 3) #  # (851, 1279, 3)

测试结果

总结

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

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

以上就是python imread函数详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python imread函数详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址