python中imread什么意思_Python中各种imread函数的区别与
联系
Python中各种imread函数的区别与联系
最近⼀直在⽤python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结⼀下,以免以后因此犯些愚
蠢的错误。如果你正好也对此感到困惑可以看下这篇总结。当然,要了解具体的细节,还是应该readthefuckcode和APIdocument,
但貌似python的很多模块⽂档都不是很全,所以只能多看代码和注释了。
先来看看常⽤的读取图⽚的⽅式:
skimge
_iamge
知乎上有篇帖⼦专门介绍了这些⽅法的性能Python的各种imread函数在实现⽅式和读取速度上有何区别?
这些⽅法可以分为四⼤家族
PIL
+numpy
这些⽅法都是通过调⽤读取图像的信息;
不直接返回numpy对象,可以⽤numpy提供的函数进⾏转换,参考Image和Ndarray互相转换;
其他模块都直接返回y对象,通道顺序为RGB,通道值得默认范围为0-255。
matplotlib
从名字中可以看出这个模块是具有matlab风格的,直接返回y格式通道顺序是RGB,通道值默认范围0-255。
opencv
使⽤opencv读取图像,直接返回y对象,通道顺序为BGR,注意是BGR,通道值默认范围0-255。
skimage
:直接返回y对象,通道顺序为RGB,通道值默认范围0-255。
_image:没有调⽤默认的,返回值为0-1的float型数据,通道顺序为RGB
关于图像的⼀些说明
可以使⽤matplotlib的pyplot模块的show也可以使⽤cv2的imshow⽅法,对于这些⽅法只要你传⼊的参数是y(通道值范围
0-255)就可以正常显⽰,不存在区别,这也可以看出numpy在python中的重要地位;但是⽅法由于它针对的是cv2的
imread所以它内部会做通道顺序的变化,传⼊为BGR转换为RGB,所以你如果传⼊RGB显⽰的就是BGR了。废话说完了,看代码。
以下是测试代码
运⾏环境为windows10+python3.6
#encoding=utf8
fromPILimportImage
importnumpyasnp
importcv2
asplt#plt⽤于显⽰图⽚
smpimg#mpimg⽤于读取图⽚
importskimage
importsys
fromskimageimportio
#PIL
#相关:,
#提供可选参数mode,但本质上是调⽤PIL,具体的模式可以去看srccode或者document
imagepath=''
im1=(imagepath)
im1=(im1)#获得numpy对象,RGB
print(type(im1))
print()
#2opencv
im2=(imagepath)
print(type(im2))#numpyBGR
print()#[width,height,3]
#3matplotlib类似matlab的⽅式
im3=(imagepath)
print(type(im3))#
print()
#4skimge
#_iamge()也是调⽤的skimage实现的,返回的是0-1float型数据
im4=(imagepath)
print(type(im4))#
print()
#print(im4)
#('test',im4)
#y()
#统⼀使⽤plt进⾏显⽰,不管是plt还是,在python中只认,但是由于的图⽚是BGR,
时相应的换通道显⽰
t(221)
('PILread')
(im1)
t(222)
('opencvread')
(im2)
t(223)
('matplotlibread')
(im3)
t(224)
('skimageread')
(im4)
#('off')#不显⽰坐标轴
()
#cmdoutput
##(851,1279,3)
##(851,1279,3)
##(851,1279,3)
##(851,1279,3)
测试结果
总结
虽然python中没有显⽰的数据类型声明,但是在编程的过程中⾃⼰必须得清楚数据类型是什么,否则就有可能犯⼀些愚蠢的错误。
本文发布于:2022-11-27 13:34:24,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/31290.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |