应用场景:在科研中,使用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()

运行效果:

示例代码二:

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)