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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。