《OpenCV計算機視覺開發實踐:基于Python(人工智能技術叢書)》(朱文偉,李建英)【摘要 書評 試讀】- 京東圖書
OpenCV的Python開發環境搭建(Windows)-CSDN博客
OpenCV也支持有限的界面編程,主要是針對窗口、控件和鼠標事件等,比如滑塊。有了這些窗口和控件,可以更好地展現圖像并調節圖像的一些參數。這些界面編程主要由High-level GUI(高層次圖形用戶界面)模塊支持。
在High-level GUI模塊中,用于新建窗口的函數是nameWindow,同時可以指定窗口的類型。該函數聲明如下:
namedWindow(winname[, flags]) -> None
其中,參數winname表示新建的窗口名稱,自己隨便取;flags表示窗口的標識(一般默認為cv2.WINDOW_AUTOSIZE,表示窗口大小自動適應圖片大小,并且不可手動更改;cv2.WINDOW_NORMAL表示用戶可以改變這個窗口大小;cv.WINDOW_OPENGL窗口創建的時候會支持OpenGL)。
在High-level GUI模塊中,用于顯示窗口的函數是imshow,聲明如下:
imshow(winname, mat) -> None
其中,參數winname表示顯示的窗口名,可以使用namedWindow函數創建窗口,如果不創建,imshow函數將自動創建;image表示需要顯示的圖像。
根據圖像的深度,imshow函數會自動對其顯示灰度值進行縮放,規則如下:
(1)如果圖像數據類型是8U(8位無符號),就直接顯示。
(2)如果圖像數據類型是16U(16位無符號)或32S(32位有符號整數),那么imshow函數內部會自動將每個像素值除以256并顯示,即將原圖像素值的范圍由[0~255×256]映射到[0~255]。
(3)如果圖像數據類型是32F(32位浮點數)或64F(64位浮點數),那么imshow函數內部會自動將每個像素值乘以255并顯示,即將原圖像素值的范圍由[0~1]映射到[0~255](注意:原圖像素值必須歸一化)。
需要注意的一點就是,imshow之后必須跟上waitKey函數,否則顯示窗口將一閃而過,不會駐留屏幕。waitKey函數聲明如下:
waitKey([delay]) -> retval
其中,參數delay表示一個延時值,單位為ms,默認為0,永久延時,一直等待,直到用戶按鍵。如果在指定時間之前沒有按下任何鍵,就返回-1;如果在指定時間之前按下任何鍵,就返回按鍵的對應值。
當delay≤0時,函數waitKey無限地等待一個鍵事件,當delay>0時,則等待delay毫秒。由于操作系統在切換線程之間有一個最短的時間間隔,因此該函數不會正好等待delay毫秒,而是等待比delay毫秒長一些,這取決于當時計算機上運行的其他操作。如果在指定時間之前沒有按下任何鍵,就返回按下鍵的代碼或-1。注意,此函數是HighGUI模塊中唯一可以獲取和處理事件的方法,因此需要定期調用它以進行正常的事件處理,除非HighGUI是在負責事件處理的環境中使用的。
另外,只有在至少創建了一個HighGUI窗口并且該窗口處于活動狀態時,該函數才起作用。如果有幾個HighGUI窗口,那么其中任何一個都可以是活動的。
【例3.5】? 新建窗口并顯示5秒后退出
import cv2 as cv
import numpy as np #導入numpy模塊
img = cv.imread('p1.jpg')
cv.namedWindow("myimg", cv.WINDOW_AUTOSIZE);
cv.imshow("myimg",img);#在“窗口1”中輸出圖片
cv.waitKey(5000);#等待5秒,程序自動退出
在上述代碼中,首先利用函數imread讀取當前目錄下的p1.jpg文件,接著用函數namedWindow新建一個窗口,并用參數WINDOW_AUTOSIZE表示窗口大小自動適應圖片大小,并且不可手動更改;最后調用waitKey函數等待5秒后程序自動退出。
運行工程,結果如圖3-6所示。
圖3?6