python read readline readlines,python f.readlines()

  python read readline readlines,python f.readlines()

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

  最近在python上做图像处理相关的事情,让各种imread函数头疼,所以今天决定把这些IM read放在一起,避免以后犯愚蠢的错误。如果你碰巧对此感到困惑,请看看这个总结。当然,要了解具体细节,还是需要看我的代码和API文档,但是python的很多模块文档看起来并不完整,只能看代码和注释。

  首先,我们来看看常见的读图方法。

  PIL。Image.open

  scipy.misc.imread

  scipy.ndimage.imread

  cv2.imread

  matplotlib.image.imread

  斯金奇

  caffe.io.loadiamge

  你知道有一个介绍这些方法性能的帖子吗?Python的各种imread函数在实现方法和读取速度上有什么区别?

  这些方法可以分为四类。

  太平航运

  PIL。Image.open numpy

  scipy.misc.imread

  scipy.ndimage.imread

  这些方法叫PIL。Image.open来读取图像的信息。

  PIL。Image.open不直接返回numpy对象,但可以使用numpy提供的函数进行转换。浏览图像和Ndarray进行相互转换;

  所有其他模块都直接返回numpy.ndarray对象。通道序列是RGB,通道值的默认范围是099 Come Come Everybody 255。

  金属材料

  matplot.image.imread

  从名字可以看出,这个模块有matlab的风格,numpy.ndarray格式的通道序列是RGB,通道值的默认范围是099 Come Come Everybody 255。

  中文版

  cv2.imread

  使用opencv导入图像并直接返回numpy.ndarray对象。频道顺序是BGR,注意是BGR,频道值的默认范围是099 Come Come Everybody 255。

  撇除

  Skimage.io.imread:直接返回numpy.ndarray对象。通道序列是RGB,通道值的默认范围是099 Come Come Everybody 255。

  Caffe.io.load_image:没有调用默认的skimage.io.imread。返回值为099的浮点数据Come Come Everybody 1,通道顺序为RGB。

  关于图像的几点注记

  可以使用show和cv2的imshow方法,它们可以使用matplotlib的pyplot模块。如果传递的参数是numpy.ndarray(通道值范围099 Come Come Everybody 255),这些方法将正确显示,没有任何区别。这也说明了numpy在python中的重要地位。但是因为cv2.imshow方法是针对cv2的imread,所以它会在内部改变通道顺序,然后传输到BGR,转换到RGB,这样传输到RGB之后就显示BGR了。废话,看代码。

  以下是测试代码

  运行环境是windows10 python3.6。

  #编码=utf8

  从pil导入图像

  进口编号为NP

  导入cv2

  Importmatplotlib.pyplotplt # PLT用于显示图像。

  importmatplotlib . imageasmpimg # mpimg用于读取图像。

  导入sk图像

  进口系统

  从skimage导入io

  #PIL

  # Related: scipy.misc.imread,scipy.ndimage.imread

  #misc.imread提供了一个可选的参数模式,但本质上是调用PIL。具体模式见srccode或document。

  # https://github.com/scipy/scipy/blob/v 0 . 17 . 1/scipy/misc/pil util . py

  imagepath=test1.jpg

  im1=image.open(imagepath)).

  Im1=NP。Array(im1) numpy对象,获取RGB

  打印(类型(im1))

  打印(im1.shape)。

  排名第二的opencv

  im2=cv2.imread(imagepath)).

  打印(类型(im2 ) ) #numpy BGR

  print(im2 . shape)#[宽度、高度和w3

  matplotlib的# 3 # 3 matlab叫w3。

  im3=MPimg.imread(imagepath)).

  print(type(im3 ) ) #np.array

  打印(im3.shape)。

  #!斯金奇

  #caffe.io.load_iamge())也由被调用的skimage实现,返回099comeeveryone 1浮点数据。

  im4=io.imread(imagepath)).

  print(type(im4 ) ) #np.array

  打印(im4.shape)。

  #打印(im4)

  #cv2.imshow(test ,im4)).

  # cv2.waitKey()))).

  #plt的统一显示。无论是PLT还是cv2.imshow,在python中都只能识别为numpy.array,但是由于cv2.imread的图像是BGR,所以在cv2.imshow的情况下会相应地改变通道进行显示

  PLT.subplot(221).

  PLT.title(pilread)).

  PLT.imshow(im1)).

  PLT.subplot(222).

  PLT.title(OpenCVread)).

  PLT.imshow(im2)).

  PLT.subplot(223).

  PLT.title(matplotlibread))。

  PLT.imshow(im3)).

  PLT.subplot(224)).

  PLT.title(skimageread).

  PLT.imshow(im4)).

  #PLT。AXIS(off) #不显示坐标轴

  plt.show())

  # # # # # # # # # # # # # # # # # # # # cmd输出# # # # # # # # # # # # # cmd输出# # # # # # # # # # # # # # .

  (851,1279和w3))。

  (851,1279和w3))。

  (851,1279和w3))。

  (851,1279和w3))。

  试验结果

  摘要

  Python没有数据类型声明,但是编程过程中你必须知道数据类型是什么。如果你不这样做,你可能会犯愚蠢的错误。

  向上向上

  作者:renelian1572

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: