應用場景:在科研中,使用python(opencv)對影像進行操作後,
通常需要實時檢視操作結果並實施調整,
而每次都在資料夾中開啟檢視是很麻煩的,
這就需要我們能夠直接透過程式碼對影像進行視覺化展示。
這裡主要用到cv2中的**imshow(), waitKey() 和 destroyWindow()/destroyAllWindows() **函式,
-
cv2.imshow(window_name, image)
用於在視窗中顯示影像。視窗自動適應影像大小。
引數1 window_name:表示要顯示影像的視窗名稱(字串)
引數2 image:要顯示的影像(由cv2.imread()讀入的影像,型別即np.ndarray) -
cv2.waitkey()
允許使用者在給定時間(毫秒)內或按下任意鍵之前顯示視窗。
引數:以等待時間(毫秒為單位)作為引數,到達給定等待時間後關閉視窗。
如果在引數中傳遞 0,那麼將無限等待 直到按下任意鍵。 -
cv2.destroyWindow()/destroyAllWindows()
(1)cv2.destroyWindow(window_name)
用於關閉特定視窗
引數 window_name:要銷燬視窗的名稱(字串, 對應imshow函式中傳入的視窗名稱)
(2)cv2.destroyAllWindows()
允許使用者在退出指令碼後隨時銷燬或關閉所有視窗。
如果同時開啟多個視窗且想要關閉,可以使用此函式。
該函式不接受任何引數,也不返回任何內容
示例程式碼一:
import cv2
img1 = cv2.imread('example_img/img1.png')
img2 = cv2.imread('example_img/img2.png')
cv2.imshow('lingdu show image1', img1)
cv2.imshow('lingdu show image2', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
執行效果:
示例程式碼二:
import cv2
img1 = cv2.imread('example_img/img1.png')
img2 = cv2.imread('example_img/img2.png')
cv2.imshow('lingdu show image1', img1)
cv2.imshow('lingdu show image2', img2)
cv2.waitKey(0)
cv2.destroyWindow('lingdu show image1')
執行效果:
在第一張圖中,展示了程式碼執行後,視窗展示了img1和img2兩張圖片;
第二張圖中,在按下任意鍵後,'lingdu show image1'視窗被銷燬,只剩下'lingdu show image2'視窗
Bug補充:
在實際使用中,經常會碰到
呼叫了cv2.destroyAllWindows()之後視窗卡死不動、無法關閉的情況,
解決辦法:
在cv2.destroyAllWindows()後,
再呼叫一次cv2.waitKey(1),重新顯示一幀畫面後即可自動退出視窗。
例如:
import cv2
img1 = cv2.imread('example_img/img1.png')
cv2.imshow('lingdu show image1', img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)