代碼
import cv2
# 讀取一張圖片
src = cv2.imread("../images/lena.jpg")
# 命名一個窗口
cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)
# 顯示一張圖片
cv2.imshow("input image", src)
# 等待鍵盤按鍵
cv2.waitKey(0)
# 銷毀所有窗口
cv2.destroyAllWindows()
imread 函數
使用函數 cv2.imread()
讀入圖像。這幅圖像應該在此程序的工作路徑,或者給函數提供完整路徑,作為第一個參數
第二個參數是要告訴函數應該如何讀取這幅圖片:
cv2.IMREAD_COLOR
:讀入一副彩色圖像。圖像的透明度會被忽略,這是默認參數cv2.IMREAD_GRAYSCALE
:以灰度模式讀入圖像cv2.IMREAD_UNCHANGED
:讀入一幅圖像,並且包括圖像的 alpha 通道
注意:就算圖像的路徑是錯的, OpenCV 也不會提醒你的,但是當你使用命令print img時得到的結果是None。
顯示圖片
使用函數 cv2.imshow()
顯示圖像。窗口會自動調整為圖像大小。
第一個參數是窗口的名字,其次才是我們的圖像。
你可以創建多個窗口,只要你喜歡,但是必須給他們不同的名字
waitKey
cv2.waitKey()
是一個鍵盤綁定函數。需要指出的是它的時間尺度是毫秒級。
函數等待特定的幾毫秒,看是否有鍵盤輸入。
特定的幾毫秒之內,如果按下任意鍵,這個函數會返回按鍵的 ASCII 碼值,程序將會繼續運行。
如果沒有鍵盤輸入,返回值為 -1,如果我們設置這個函數的參數為 0,那它將會無限期的等待鍵盤輸入。
它也可以被用來檢測特定鍵是否被按下,例如按鍵 a 是否被按下
警告:如果你用的是 64 位系統,你需要將
k = cv2.waitKey(0)
這行改成k = cv2.waitKey(0) & 0xFF
。
銷毀窗口
cv2.destroyAllWindows()
可以輕易刪除任何我們建立的窗口。
如果你想刪除特定的窗口可以使用 cv2.destroyWindow()
,在括號內輸入你想刪除的窗口名
一種特殊的情況是,你也可以先創建一個窗口,之后再加載圖像。這種情況下,你可以決定窗口是否可以調整大小。使用到的函數是 cv2.namedWindow()。初始設定函數標簽是 cv2.WINDOW_AUTOSIZE。但是如果你把標簽改成cv2.WINDOW_NORMAL, 你就可以調整窗口大小了。當圖像維度太大,或者要添加軌跡條時,調整窗口大小將會很有用
matplotlib 顯示圖像
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.show()
注意: 彩色圖像使用 OpenCV 加載時是 BGR 模式。但是 Matplotib 是 RGB模式。所以彩色圖像如果已經被 OpenCV 讀取,那它將不會被 Matplotib 正確顯示。