python中imread什么意思_imwrite函数

python中imread什么意思_imwrite函数Python中各种imread函数的区别与联系最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误。如果你正好也对此感到困惑可以看下这篇总结。当然,要了解具体的细节,还是应该readthefuckcode和APIdocument,但貌似python的很多模块文档都不是很全,所以只能多看代码和注释

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Python 中各种imread函数的区别与联系


最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误。如果你正好也对此感到困惑可以看下这篇总结。当然,要了解具体的细节,还是应该 read the fuck codeAPI document,但貌似python的很多模块文档都不是很全,所以只能多看代码和注释了。


先来看看常用的读取图片的方式:

这些方法可以分为四大家族

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.net/182052.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Matlab矩阵复制扩充

    考虑这个问题:定义一个简单的行向量a    如何复制10行呢?即:    同理,对于一个列向量,如何复制10列呢?  关键函数1:repmat(A,m,n):将向量/矩阵在垂直方向复制m次,在水平方向复制n次。      再举一个例子,对于a=[12;34]:         垂直方向复制3次,水平方向复制2次,

    2022年4月8日
    61
  • Python设置环境变量

    Python设置环境变量文章目录一、我们安装Python。二、设置环境变量。1、找到计算机属性。2、设置PATH。一、我们安装Python。点击链接下载:python下载你也可以无脑安装,对计算机的影响不打,不过建议别无脑我们选择自己安装,然后选择想要安装的目录,不然我们能看见在InstallNow下面有一个目录那个就是默认的安装C盘位置,当然若你觉得这样好找python也可以直接点第一个安装这里如果看不懂可以不管,也可以根据自我需求来点,可以用微信的拍照翻译二、设置环境变量。1、找到计算机属性。我们右击桌

    2025年8月18日
    1
  • sdio接口定义_sdio接口

    sdio接口定义_sdio接口转:https://www.cnblogs.com/hellokitty2/p/10981084.htmlSDIO接口一、SDIO简介SDIO接口是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备。SDIO1.0标准定义了两种类型的SDIO卡:1.全速的SDIO卡,传输率可以超过100Mbps;2.低速的SDIO卡,支援的时脉速率…

    2022年10月4日
    3
  • 决策引擎选购指南[通俗易懂]

    决策引擎选购指南[通俗易懂]决策引擎选购指南决策引擎或规则引擎的概念在2015年随着互联网金融行业的发展得到了快速普及,逐渐被各大公司接纳并入到企业基础设施中,用于集中管理高频多变的业务运营策略,相对于原先的硬代码维护的方式,有着便捷、高效、低成本的特点。市面上关于决策引擎的分享不少,但主要集中在技术层面的经验分享,比如如何从0到1搭建一套决策引擎,大家如果感兴趣也可以自行进行查阅。反而从公司层面出发,如何评估以及选择决策引擎的文章十分有限,从而导致了公司在采购的时候往往因为信息不对称而十分被动。因此,本文将从一位…

    2022年6月24日
    33
  • 前端vue定时器_vue切换页面清除所有定时器

    前端vue定时器_vue切换页面清除所有定时器vue页面定时器的两种方式

    2025年7月29日
    3
  • py2exe用法_pynput库

    py2exe用法_pynput库一、简要py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,目的就是在没有安装python的windows系统上运行这个可执行程序。py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序。py2exe是发布在开源许可证下的。

    2025年10月24日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号