如何將圖像讀取爲numpy矩陣?如何將numpy矩陣變成圖像保存?爲什麼cv2保存的圖片是黑色的?爲什麼cv2顯示的時候會黑屏?如何給灰度圖增加一個維度?

圖像的庫是很多的,我發現自己真的額也是不精通,以後會專門使用幾個庫,讓自己對一個庫的知識體系更加完整,要不然真的很零散。然後在圖像處理這方面,決定好好學習使用一下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區間!

  1. 直接就以灰度圖片的形式讀入:
img = cv2.imread("C:\\world.jpg", cv2.IMREAD_GRAYSCALE)
  1. 從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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章