【OpenCV-Python】圖像的載入、顯示和輸出(imread()、imshow()、waitKey()、namedWindow()、imwrite())

圖像的載入:imread()函數

imread()函數可以用來非常便捷地讀取文件中的圖片到Opencv中。這個函數一般需要兩個參數:

(1)載入圖片的路徑名。如果圖像文件在工程文件夾下,可以直接用文件名讀取,如“cat.jpg”,否則需要輸入完整的訪問路徑,如“D:\\test\\lena.png”。這裏還有幾個tips:

  • imread函數中,一個點代表省略當前文件夾路徑,兩個點則代表回到上一個文件夾路徑。

  • 通常可以通過以下方式獲得圖片的路徑:在圖片上右鍵——屬性——安全——對象名稱,如下圖所示。但是需要注意,OpenCV的imread()不支持單右斜線形式的路徑。但是,可以支持其他斜線形式都,比如雙右斜線、雙左斜線、單左斜線或前述三種斜線組成的混合型形式!!

(2)int 類型的 flags,即載入標記,用於指定加載圖像的顏色類型,其默認值爲1,表示載入三通道的彩色圖像。常用的標識符解釋如下:

  • cv.IMREAD_UNCHANGED,等價取值爲-1,載入無損的原圖像,包括alpha通道;
  • cv.IMREAD_GRAYSCALE,等價取值爲0,以灰度模式加載圖像;
  • cv.IMREAS_COLOR,默認標誌,等價取值爲1,加載彩色圖像。圖像的透明度都將被忽略。

圖像的顯示:imshow()函數

使用函數cv.imshow() 在窗口中顯示圖像,該函數同樣需要兩個參數:

(1)winname,窗口標識名稱。

(2)填所需要顯示的圖像。

在我們直接使用 cv.imshow() 函數時,創建出來的窗口往往是“一瞬即逝”的。我們需要用 cv.waitKey() 來“維持”窗口。cv.waitKey() 具有鍵盤綁定功能,它的參數是時間(以毫秒爲單位)。該函數將爲任何鍵盤事件等待指定的毫秒數。如果在此期間按任意鍵,程序將繼續。如果傳遞 0,它將無限期地等待擊鍵。我們還可以將其設置爲檢測特定的按鍵,例如是否按下了按鍵q或Esc(ASCII碼爲27)。最後,還需要通過cv.destroyAllWindows()cv.destroyWindow() 銷燬創建出的窗口,釋放出相應的內存空間。cv.destoryAllWindows()會銷燬創建的所有窗口,如果要銷燬指定的窗口,可以使用cv.destroyWindow()函數,在其中傳遞確切的窗口名稱作爲參數。

#代碼示例
import cv2 as cv

img = cv.imread('cat.jpg',cv.IMREAD_GRAYSCALE)
cv.imshow('image',img)

#以下三種方式爲並列關係,僅爲解釋cv.waitKey()函數用法
#無限等待等待任意鍵盤輸入
cv.waitKey(0)
cv.destroyAllWindows()

#窗口顯示1s(1s=1000ms)後關閉
cv.waitKey(1000)
cv.destroyAllWindows()

#等待按q鍵則返回
if cv2.waitKey(0) & 0xFF == ord('q'):
    cv.destroyAllWindows()

我們也可以在加載圖像之前,指定創建出的窗口性質。在這種情況下,我們會用到cv.namedWindow()函數。該函數除了需要傳入窗口名稱之外,還需要一個窗口標識,有如下幾種選擇:

  • cv.WINDOW_NORMAL,在此設置下,用戶可以任意改變窗口大小;
  • cv.WINDOW_AUTOSIZE,在此設置下,窗口大小會自動調整以適應顯示的圖像,用戶不能手動改變窗口大小;
  • cv.WINDOW_OPENGL,在此設置下,窗口創建時可以支持OpenGL。

namedWindow()函數的第二個參數有默認值WINDOW_AUTOSIZE。


輸出圖像文件:imwrite()函數

OpenCV中,輸出圖像到文件一般採用 imwrite() 函數,該函數需要三個參數:

(1)帶後綴的文件名,如“123.jpg”。

(2)需要輸出的圖像名稱。

(3)用於改變圖片質量的特定格式保存的參數編碼,一般情況下不需要填寫。


綜合練習

import cv2 as cv

#使用函數cv.imread()讀取圖像。
image = cv.imread('lena.jpg',cv.IMREAD_GRAYSCALE)

#使用函數cv.imshow()在窗口中顯示圖像。
image_1 = cv.imread('lena.jpg')
cv.namedWindow('lena', cv.WINDOW_NORMAL)  # cv.WINDOW_NORMAL可調整圖片顯示大小
cv.imshow("lena", image_1)

k = cv.waitKey(0)

#Esc鍵退出
if k == 27: 
    cv.destroyAllWindows()

#s鍵保存
elif k == ord("s"): 
    cv.imwrite("lena_new.jpg",image_1)
    cv.destroyAllWindows()

 

參考:

https://docs.opencv.org/4.1.1/dc/d2e/tutorial_py_image_display.html

《OpenCV3編程入門》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章