pythonread()函数,pythonimread用法

pythonread()函数,pythonimread用法,python imread函数详解

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

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