本文主要介绍python imread函数的详细说明。本文通过一个简单的案例来说明对这项技术的理解和使用。以下是详细内容,有需要的朋友可以参考一下。
Python 中各种imread函数的区别与联系
最近一直在用python做图像处理相关的事情,被各种imread函数困扰。所以,我决定今天总结一下这些IM阅读,避免以后犯一些愚蠢的错误。如果你恰好对此感到困惑,可以看看这个总结。当然,要知道具体细节,还是要看他妈的代码和API文档,不过python里面好像很多模块文档都不全,只能多看代码和注释了。
先来看看常用的读取图片的方式:
PIL。Image.open
scipy.misc.imread
scipy.ndimage.imread
cv2.imread
matplotlib.image.imread
斯金奇
caffe.io.load_iamge
这些方法可以分为四大家族
PIL
PIL。Image.open numpy
scipy.misc.imread
scipy.ndimage.imread
这些方法都是通过调用PIL来读取图像的信息。Image.open
PIL。Image.open不直接返回numpy对象,而是可以通过numpy提供的函数进行转换,参考图像和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。
#编码=utf8
从PIL进口图片
将numpy作为np导入
导入cv2
导入matplotlib.py plot作为PLT # PLT用于显示图片。
导入matplotlib.image作为mpig # mpig用于读取图片。
进口不足
导入系统
从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)#[宽度,高度,3]
#3 matplotlib类似于matlab
im3=mpimg.imread(imagepath)
print(type(im3))#np.array
打印(im3.shape)
#4 skimge
#caffe.io.load_iamge()也是由调用的skimage实现的,它返回0-1的浮点数据。
im4=io.imread(图像路径)
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)
标题(“PIL阅读”)
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输出# # # # # # # # # # # #
# 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函数的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。