1. PIL.Image.open
創(chuàng)新互聯(lián)長期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為稷山企業(yè)提供專業(yè)的成都網(wǎng)站制作、做網(wǎng)站,稷山網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
代碼在這里:Pillow/Image.py at 3.1.x · python-pillow/Pillow · GitHub
open() 函數(shù)打開圖像,但并不讀入,直到有操作發(fā)生。
具體的讀取操作是在 ImageFile.py 寫的。大體流程是先檢測文件類型,整塊地讀入文件內(nèi)容,然后調(diào)用解碼器解碼,做了很多優(yōu)化,效率應(yīng)該還是很高的。
2. scipy.ndimage.imread
代碼在這里:scipy/io.py at v0.17.1 · scipy/scipy · GitHub
imread 調(diào)用 scipy.misc.pilutil.imread。從名字就能看出來其實調(diào)用的還是 Pillow。
根據(jù) pilutil 代碼:scipy/pilutil.py at v0.17.1 · scipy/scipy · GitHub
確實是調(diào)用 pil.image.open(),然后返回一個 fromimage()。
3. scipy.misc.imread
misc 的 __init__.py 在這里:scipy/__init__.py at v0.17.1 · scipy/scipy · GitHub
調(diào)用的還是 pilutil 中的 imread
相關(guān)代碼如下
try:
from .pilutil import *
from . import pilutil
__all__ += pilutil.__all__
del pilutil
except ImportError:
pass
也算是學(xué)了一招,從 pilutil 導(dǎo)入其所有函數(shù)添加到當前空間,然后又刪除了 pilutil 消除影響。
4. skimage.io.imread
代碼在這里:scikit-image/_io.py at master · scikit-image/scikit-image · GitHub
是通過插件 plugin 來讀入不同的文件,而且會試用幾個不同的 plugins 來找到合適的。
使用 call_plugin 來調(diào)用,代碼在這里:scikit-image/manage_plugins.py at master · scikit-image/scikit-image · GitHub
可以根據(jù)如下代碼查看插件調(diào)用的優(yōu)先級
# 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 打開圖像之后,再轉(zhuǎn)換成 ndarray。
5. cv2.imread
這里是調(diào)用的 CV::imread(),代碼在這里:opencv/loadsave.cpp at master · opencv/opencv · GitHub。一般來說 C\C++ 的實現(xiàn),應(yīng)該比 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 實現(xiàn)的,代碼在這里:matplotlib/_png.cpp at master · matplotlib/matplotlib · GitHub。
matplotlib 是先用 pil 的 open 打開圖像,如果格式是 png,就用原生方法打開。相關(guān)代碼如下:
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 文件,調(diào)用 _png.read_png。如果不是 png 直接使用 pilread(就是用 pil 的 Image.open 然后 pil_to_array)。
matplotlib 的源碼確實比較復(fù)雜,一大部分主體是用 C 寫的,改動很激進,功能更新猛烈。
代碼:
import?os
data?=?os.popen("wmic?VOLUME?GET?Label").read()
print?data.decode("gb2312")
執(zhí)行結(jié)果:
正好是我電腦的5個磁盤的卷標。注意Label下面那行是空行,表示那個盤沒設(shè)置卷標。
例如stat位于os module,那么可以help(os),出現(xiàn)如上圖的結(jié)果,其中FILE就是其源文件位置,當然,如果這個module是c module,那就看不到相應(yīng)的源碼了。
你提到os模塊中沒有stat這個函數(shù),那時因為它在posix或者nt module中實現(xiàn),os模塊根據(jù)當前的操作系統(tǒng)來導(dǎo)入相應(yīng)的實現(xiàn)。
文章題目:讀取函數(shù)代碼python python讀取nii
當前鏈接:http://jinyejixie.com/article2/dosgsoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、企業(yè)建站、軟件開發(fā)、網(wǎng)站維護、關(guān)鍵詞優(yōu)化、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)