您的位置:

OpenCV之cv2.imshow()

一、cv2.imshow()介绍

cv2.imshow()是OpenCV中显示图像的主要函数之一。它可以显示传递给它的图像窗口,或者将图像作为选定窗口的内容。cv2.imshow()的语法如下:

cv2.imshow(winname, mat)

其中,winname是显示窗口的名称,mat是要显示的图像。该函数返回值为None。

二、显示静态图像

要显示静态图像,可以使用cv2.imread()函数读取图像,然后使用cv2.imshow()函数进行显示。下面是一个例子:

import cv2

# 读取图像
img = cv2.imread('test.jpg')

# 显示图像
cv2.imshow('image', img)

# 等待按键事件
cv2.waitKey(0)

运行上述代码,我们可以看到弹出了一个名为"image"的窗口,其中显示了读取的图像。

三、捕捉键盘事件

cv2.imshow()函数通常与cv2.waitKey()配合使用。cv2.waitKey()等待键盘事件,返回按下按键的ASCII码。

下面的例子演示了如何在按下ESC键或q键时关闭图像显示窗口:

import cv2

# 读取图像
img = cv2.imread('test.jpg')

# 显示图像
cv2.imshow('image', img)

# 循环等待按键事件,直到ESC键或q键被按下
while True:
    k = cv2.waitKey(0)
    if k == 27 or k == ord('q'):
        break

# 关闭窗口
cv2.destroyAllWindows()

在该例子中,我们首先显示图像,并循环等待按键事件。如果按下了ESC键或q键,就跳出循环,关闭显示窗口。需要注意的是,cv2.waitKey()的参数0表示无限等待,直到按下按键。

四、显示视频流

除了静态图像,cv2.imshow()函数还可以用于显示实时视频流。可以使用cv2.VideoCapture()函数打开视频文件或摄像头,然后使用cv2.imshow()函数显示每个帧。

下面是一个读取并显示视频文件的例子:

import cv2

# 打开视频文件
cap = cv2.VideoCapture('test.mp4')

# 循环显示每一帧
while cap.isOpened():
    # 读取一帧
    ret, frame = cap.read()

    # 如果帧读取失败,退出循环
    if not ret:
        break

    # 显示帧
    cv2.imshow('video', frame)

    # 等待按键事件,延时10毫秒
    k = cv2.waitKey(10)

    # 如果按下ESC键或q键,退出循环
    if k == 27 or k == ord('q'):
        break

# 释放视频文件和窗口
cap.release()
cv2.destroyAllWindows()

在该例子中,我们首先使用cv2.VideoCapture()函数打开视频文件,然后循环读取每个帧并显示。如果按下ESC键或q键,就退出循环,释放视频文件和显示窗口。

五、小结

cv2.imshow()是OpenCV中一个非常重要的函数,它可以用于显示静态图像、捕捉键盘事件、以及显示视频流等。在使用cv2.imshow()函数时,需要注意显示窗口名称、图像文件的读取、键盘事件的等待、视频流的读取等方面的问题。