最近一直在用python做影象處理相關的東西,被各種imread函式搞得很頭疼,因此今天決定將這些imread總結一下,以免以後因此犯些愚蠢的錯誤。如果你正好也對此感到困惑可以看下這篇總結。當然,要了解具體的細節,還是應該 read the **** code和api document,但貌似python的很多模組文件都不是很全,所以只能多看**和注釋了。
pil
pil.image.open + numpymatplotlibscipy.misc.imread
scipy.ndimage.imread
這些方法都是通過呼叫pil.image.open 讀取影象的資訊;
pil.image.open 不直接返回numpy物件,可以用numpy提供的函式進行轉換,參考image和ndarray互相轉換;
其他模組都直接返回numpy.ndarray物件,通道順序為rgb,通道值得預設範圍為0-255。
matplot.image.imreadopencv從名字中可以看出這個模組是具有matlab風格的,直接返回numpy.ndarray格式通道順序是rgb,通道值預設範圍0-255。
cv2.imreadskimage使用opencv讀取影象,直接返回numpy.ndarray 物件,通道順序為bgr,注意是bgr,通道值預設範圍0-255。
skimage.io.imread: 直接返回numpy.ndarray 物件,通道順序為rgb,通道值預設範圍0-255。可以使用matplotlib的pyplot模組的show也可以使用cv2的imshow方法,對於這些方法只要你傳入的引數是numpy.ndarray(通道值範圍0-255) 就可以正常顯示,不存在區別,這也可以看出numpy在python中的重要地位;但是cv2.imshow方法由於它針對的是cv2的imread 所以它內部會做通道順序的變化,傳入為bgr轉換為rgb,所以你如果傳入rgb顯示的就是bgr了。廢話說完了,看**。caffe.io.load_image: 沒有呼叫預設的skimage.io.imread,返回值為0-1的float型資料,通道順序為rgb
執行環境為windows10+python3.6
#encoding=utf8
from
pil import
image
import
numpy as
npimport
cv2import
matplotlib.pyplot as
plt # plt 用於顯示
import
matplotlib.image as
mpimg # mpimg 用於讀取
import
skimage
import
sysfrom
skimage import
io #pil
#相關:scipy.misc.imread, scipy.ndimage.imread
#misc.imread 提供可選引數mode,但本質上是呼叫pil,具體的模式可以去看srccode或者document
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') # 不顯示座標軸
雖然python中沒有顯示的資料型別宣告,但是在程式設計的過程中自己必須得清楚資料型別是什麼,否則就有可能犯一些愚蠢的錯誤。
python中各種轉義字元
空白總是美好的,而我們總是困惑 t時前面到底有多少空白,接下來讓我們來仔細了解一下 在控制台輸出資料的時候,也就是用printf 的時候,我們經常用 t來控制對齊,以使輸出的結果更加整齊美觀。然而有時候我們發現及時使用了 t 也會出現資料對不齊的情況,這就跟 t究竟對應幾個空格有關係。先給出程式和執...
python中 的各種問題
今天sololearn和shubham打了一局輸在了這個題上 其實 數字a 數字b 數字c 就是一種比較方便的訪問形式 主要適合list str也是可以的 其實大部分狀態下都是預設的,例如下面這段 c 1,2,3,4,5,6 print c 1 3 答案就是輸出c的第乙個和第二個數字,2,3 如果加...
python中的各種符號
在這裡所作的是將所有的 python 符號和關鍵字列出來,這些都是值得掌握的重點。關鍵字 and del from not while as elif global or with assert else if pass yield break except import print class e...