圖像的庫是很多的,我發現自己真的額也是不精通,以後會專門使用幾個庫,讓自己對一個庫的知識體系更加完整,要不然真的很零散。然後在圖像處理這方面,決定好好學習使用一下cv2。
opencv-python的文檔在這裏
安裝
pip install opencv-python
讀取你的圖像數據
import cv2
img = cv2.imread("C:\\world.jpg")
這樣的讀取進來的數據是按照H,W,C的順序讀取進來的,然後數據的類型就是numpy矩陣,默認是uint8類型,還有個重點就是三個通道的順序是BGR,和我們常識相反。想要轉換成深度學習中可以處理的話,最好直接轉換成0-1之間:
img = img.astype(np.float32)/255.
保存圖像
如果想要保存的話,需要注意cv2使用的函數認爲0-255之間的,所以剛纔處理的圖片一般要轉換回這個區間纔可以,否則可能保存的圖片全是黑色的!
cv2.imwrite("C:\\world2.jpg", img*255.)
灰度圖片
注意點:操作的時候使用0-1區間的像素值進行操作;顯示的時候用float類型的0-1區間或者uint8類型的0-255區間,imshow會自動識別;但是imwrite保存的時候使用0-255區間!
- 直接就以灰度圖片的形式讀入:
img = cv2.imread("C:\\world.jpg", cv2.IMREAD_GRAYSCALE)
- 從BGR圖轉換過來
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
還有注意的是,灰度圖片的numpy矩陣的shape是H,W,不帶C!如果想要增加一個維度的話,可以使用下面這個numpy基本操作:
img_gray = img_gray[:,:,None]
這樣的話,得出的維度就是H,W,C,其中C=1。
顯示圖片
注意加上cv2.waitKey(0)不會有黑屏的情況。後面必須加上這句話!cv2.waitKey(delay),delay參數表示延遲多少毫秒。默認情況爲0。當delay≤0,可以理解爲延遲無窮大毫秒,就是暫停了。(參考鏈接)
cv2.imshow('pic', img)
cv2.waitKey(0)
或者
cv2.imshow('pic', img*255.)
cv2.waitKey(0)