python中imread什么意思_imwrite函数
Python 中各种imread函数的区别与联系
最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误。如果你正好也对此感到困惑可以看下这篇总结。当然,要了解具体的细节,还是应该 read the fuck code和API document,但貌似python的很多模块文档都不是很全,所以只能多看代码和注释了。
先来看看常用的读取图片的方式:
- PIL.Image.open
- scipy.misc.imread
- scipy.ndimage.imread
- cv2.imread
- matplotlib.image.imread
- skimge
- caffe.io.load_iamge 知乎上有篇帖子专门介绍了这些方法的性能Python的各种imread函数在实现方式和读取速度上有何区别?
这些方法可以分为四大家族
PIL
PIL.Image.open + numpy scipy.misc.imread scipy.ndimage.imread 这些方法都是通过调用PIL.Image.open 读取图像的信息; PIL.Image.open 不直接返回numpy对象,可以用numpy提供的函数进行转换,参考Image和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
#encoding=utf8
from PIL import Image
import numpy as np
import cv2
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import skimage
import sys
from skimage import io
#PIL
#相关:scipy.misc.imread, scipy.ndimage.imread
#misc.imread 提供可选参数mode,但本质上是调用PIL,具体的模式可以去看srccode或者document
#https://github.com/scipy/scipy/blob/v0.17.1/scipy/misc/pilutil.py
imagepath='test1.jpg'
im1=Image.open(imagepath)
im1=np.array(im1)#获得numpy对象,RGB
print(type(im1))
print(im1.shape)
#2 opencv
im2=cv2.imread(imagepath)
print(type(im2))#numpy BGR
print(im2.shape)#[width,height,3]
#3 matplotlib 类似matlab的方式
im3 = mpimg.imread(imagepath)
print(type(im3))#np.array
print(im3.shape)
#4 skimge
#caffe.io.load_iamge()也是调用的skimage实现的,返回的是0-1 float型数据
im4 = io.imread(imagepath)
print(type(im4))#np.array
print(im4.shape)
#print(im4)
# cv2.imshow('test',im4)
# cv2.waitKey()
#统一使用plt进行显示,不管是plt还是cv2.imshow,在python中只认numpy.array,但是由于cv2.imread 的图片是BGR,cv2.imshow 时相应的换通道显示
plt.subplot(221)
plt.title('PIL read')
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 output################################
# <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中没有显示的数据类型声明,但是在编程的过程中自己必须得清楚数据类型是什么,否则就有可能犯一些愚蠢的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/182052.html原文链接:https://javaforall.cn
相关文章
- Python 编程 | 连载 23 - 常用函数与高阶函数
- pycharm自带python环境吗_Python IDE环境之 新版Pycharm安装详细教程[通俗易懂]
- python语言变量命名规则有什么_Python变量命名规则(超级详细)
- python转置矩阵函数_对python 矩阵转置transpose的实例讲解
- python编程前景_Python前景如何,学完后可以从事方向?
- python编程是什么-Python编程
- python格式化转换_Python进制转换format格式化[通俗易懂]
- python的random()函数用法_Python随机函数random用法示例
- python中sqrt函数用法_Python : sqrt() 函数
- python中dtype什么意思_NumPy Python中的数据类型对象(dtype)
- python中替换字符串中字符_Python replace()函数:替换字符串中的某个字符「建议收藏」
- python中的set(),zip()以及map()函数
- python:set() 函数[通俗易懂]
- python setattr函数_Python内置函数(53)——setattr
- 【说站】python有哪些数组叠加函数
- Python修改文件后缀_python重命名文件名
- python lambda表达式 if_Python学习-lambda表达式
- python中main的含义及用法_python main函数有什么用
- 关于python中lambda函数的描述_Python全局变量
- python deepcopy函数_Python deepcopy
- copy.deepcopy()_python列表copy函数
- python定义函数求和_Python定义函数实现累计求和操作
- 短短几十行 Python 代码,实现分词功能搜索引擎(2.0版)
- 【测试开发】python系列教程:Python 推导式
- 软件测试|什么是Python函数及名称空间?
- Python的内置函数和匿名函数
- Python输入函数(input)如何使用?使用时需要注意什么?
- python-Python与MongoDB数据库-使用Python执行MongoDB查询(一)
- python全栈开发-Day10 装饰器(闭合函数的应用场)详解编程语言
- python基础7之python3的内置函数详解编程语言
- Python函数详解编程语言
- Linux下使用Python开发体验之旅(linux使用python)
- 使用 Python 进行社交媒体情感分析入门
- Python标准库内置函数complex介绍