读取函数代码python python读取nii

Python的各种imread函数在实现方式和读取速度上有何区别

1. PIL.Image.open

创新互联长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为稷山企业提供专业的成都网站制作、做网站,稷山网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。

代码在这里:Pillow/Image.py at 3.1.x · python-pillow/Pillow · GitHub

open() 函数打开图像,但并不读入,直到有操作发生。

具体的读取操作是在 ImageFile.py 写的。大体流程是先检测文件类型,整块地读入文件内容,然后调用解码器解码,做了很多优化,效率应该还是很高的。

2. scipy.ndimage.imread

代码在这里:scipy/io.py at v0.17.1 · scipy/scipy · GitHub

imread 调用 scipy.misc.pilutil.imread。从名字就能看出来其实调用的还是 Pillow。

根据 pilutil 代码:scipy/pilutil.py at v0.17.1 · scipy/scipy · GitHub

确实是调用 pil.image.open(),然后返回一个 fromimage()。

3. scipy.misc.imread

misc 的 __init__.py 在这里:scipy/__init__.py at v0.17.1 · scipy/scipy · GitHub

调用的还是 pilutil 中的 imread

相关代码如下

try:

from .pilutil import *

from . import pilutil

__all__ += pilutil.__all__

del pilutil

except ImportError:

pass

也算是学了一招,从 pilutil 导入其所有函数添加到当前空间,然后又删除了 pilutil 消除影响。

4. skimage.io.imread

代码在这里:scikit-image/_io.py at master · scikit-image/scikit-image · GitHub

是通过插件 plugin 来读入不同的文件,而且会试用几个不同的 plugins 来找到合适的。

使用 call_plugin 来调用,代码在这里:scikit-image/manage_plugins.py at master · scikit-image/scikit-image · GitHub

可以根据如下代码查看插件调用的优先级

# For each plugin type, default to the first available plugin as defined by

# the following preferences.

preferred_plugins = {

# Default plugins for all types (overridden by specific types below).

'all': ['pil', 'matplotlib', 'qt', 'freeimage'],

'imshow': ['matplotlib'],

'imshow_collection': ['matplotlib']

}

plugins 的源代码在这里:scikit-image/skimage/io/_plugins at master · scikit-image/scikit-image · GitHub。可以看到 pil 的 imread,是用 open 打开图像之后,再转换成 ndarray。

5. cv2.imread

这里是调用的 CV::imread(),代码在这里:opencv/loadsave.cpp at master · opencv/opencv · GitHub。一般来说 C\C++ 的实现,应该比 python 速度快一点。

6. matplotlib.image.imread

matplotlib 的文档里面说,matplotlib 原生只可以读取 PNG 文件,有 PIL 的时候,可以读取其他类型的文件。如果使用 URL 打开在线图像文件,需要符合 PIL 的文档要求。

matplotlib.image.imread 的代码在这里:matplotlib/image.py at master · matplotlib/matplotlib · GitHub。matplotlib 的原生 PNG 读取和写入,是用 C 实现的,代码在这里:matplotlib/_png.cpp at master · matplotlib/matplotlib · GitHub。

matplotlib 是先用 pil 的 open 打开图像,如果格式是 png,就用原生方法打开。相关代码如下:

handlers = {'png': _png.read_png, }

if format is None:

if cbook.is_string_like(fname):

parsed = urlparse(fname)

# If the string is a URL, assume png

if len(parsed.scheme) 1:

ext = 'png'

else:

basename, ext = os.path.splitext(fname)

ext = ext.lower()[1:]

elif hasattr(fname, 'name'):

basename, ext = os.path.splitext(fname.name)

ext = ext.lower()[1:]

else:

ext = 'png'

else:

ext = format

if ext not in handlers:

im = pilread(fname)

if im is None:

raise ValueError('Only know how to handle extensions: %s; '

'with Pillow installed matplotlib can handle '

'more images' % list(six.iterkeys(handlers)))

return im

声明的处理器只有 png。如果是 png 文件,调用 _png.read_png。如果不是 png 直接使用 pilread(就是用 pil 的 Image.open 然后 pil_to_array)。

matplotlib 的源码确实比较复杂,一大部分主体是用 C 写的,改动很激进,功能更新猛烈。

python实现读取硬盘卷标函数,希望获取到磁盘的卷标信息

代码:

import os

data = os.popen("wmic VOLUME GET Label").read()

print data.decode("gb2312")

执行结果:

正好是我电脑的5个磁盘的卷标。注意Label下面那行是空行,表示那个盘没设置卷标。

请教,python中如何获取函数的实现源码

例如stat位于os module,那么可以help(os),出现如上图的结果,其中FILE就是其源文件位置,当然,如果这个module是c module,那就看不到相应的源码了。

你提到os模块中没有stat这个函数,那时因为它在posix或者nt module中实现,os模块根据当前的操作系统来导入相应的实现。


网站名称:读取函数代码python python读取nii
当前地址:http://pwwzsj.com/article/dosgsoc.html