Python武器庫 - 科研中常用的python影像操作 - 影像顯示

樱桃的python武器库發表於2024-06-19

應用場景:在科研中,使用python(opencv)對影像進行操作後,
通常需要實時檢視操作結果並實施調整,
而每次都在資料夾中開啟檢視是很麻煩的,
這就需要我們能夠直接透過程式碼對影像進行視覺化展示。

這裡主要用到cv2中的**imshow(), waitKey() 和 destroyWindow()/destroyAllWindows() **函式,

  1. cv2.imshow(window_name, image)
    用於在視窗中顯示影像。視窗自動適應影像大小。
    引數1 window_name:表示要顯示影像的視窗名稱(字串)
    引數2 image:要顯示的影像(由cv2.imread()讀入的影像,型別即np.ndarray)

  2. cv2.waitkey()
    允許使用者在給定時間(毫秒)內或按下任意鍵之前顯示視窗。
    引數:以等待時間(毫秒為單位)作為引數,到達給定等待時間後關閉視窗。
    如果在引數中傳遞 0,那麼將無限等待 直到按下任意鍵。

  3. 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()

執行效果:
Python武器庫 - 科研中常用的python影像操作 - 影像顯示

示例程式碼二:

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')

執行效果:
Python武器庫 - 科研中常用的python影像操作 - 影像顯示
Python武器庫 - 科研中常用的python影像操作 - 影像顯示
在第一張圖中,展示了程式碼執行後,視窗展示了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)

相關文章