您的位置:

OpenCV中的cv2.imshow详解

在计算机视觉领域中,OpenCV是应用最广泛最常用的工具之一,而cv2.imshow()函数作为OpenCV中用于显示图像的函数之一,又是非常常用的一个函数,我们在很多项目中都使用过该函数。那么,本篇文章将从多个方面详细阐述cv2.imshow()函数,希望能够帮助读者更好地使用OpenCV库。

一、显示一张图像

cv2.imshow()函数最基本的功能是用于显示一张图像。


import cv2

img = cv2.imread('test.jpg')
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码读取一个名为test.jpg的图像,并使用cv2.imshow()函数进行图像显示。imshow()函数的第一个参数是窗口的名称,第二个参数是待显示的图像。另外,cv2.waitKey()函数的主要作用是在图像窗口中等待键盘输入,而cv2.destroyAllWindows()函数用于销毁创建的所有窗口,这里我们可以通过键盘输入ESC键来退出程序。

二、显示灰度图像

我们知道,在处理图像时,有时候需要将图像转为灰度图像进行处理。使用cv2.imshow()函数来显示灰度图像也非常简单。


import cv2

img = cv2.imread('test.jpg',0)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码中,cv2.imread()函数的第二个参数为0表示将读取的图像转换为灰度图像,然后再使用cv2.imshow()函数进行图像的显示。

三、在图像中加入文本

在图像中加入文本是图像处理的常见需求,使用cv2.putText()函数可以实现该功能。


import cv2

img = cv2.imread('test.jpg')
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'Hello World!',(50,200), font, 2,(255,255,255),2,cv2.LINE_AA)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.putText()函数的第一个参数为要进行操作的图像,第二个参数是要添加的文本,第三个参数是文本显示位置,第四个参数是字体类型,第五个参数是字体大小,第六个参数是文本颜色,第七个参数是文本粗细,第八个参数是线条类型。

四、调整图像大小

在图像处理中,有时候需要对图像进行缩放或者放大操作。使用cv2.resize()函数可以轻松实现该功能。


import cv2

img = cv2.imread('test.jpg')
resized_image = cv2.resize(img,(500,500))
cv2.imshow('image',resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码中,cv2.resize()函数的第一个参数是待调整的图像,第二个参数是调整后图像的大小。由于OpenCV的图像大小参数是以宽度和高度来表示的,因此我们需要将调整后的宽度和高度以一个元组的形式传递给cv2.resize()函数。

五、调整图像亮度和对比度

在图像处理中,有时候需要对图像进行亮度和对比度调整以达到更好的视觉效果,使用cv2.addWeighted()函数可以完成该功能。


import cv2
import numpy as np

img = cv2.imread('test.jpg')

alpha = 1.5
beta = 10
resized_image = cv2.addWeighted(img, alpha, np.zeros(img.shape, img.dtype), 0, beta)

cv2.imshow('image',resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.addWeighted()函数的第一个参数是待调整的图像,第二个参数是亮度调整系数,第三个参数是一个与原图像大小相同全0的数组,第四个参数是对比度调整系数,第五个参数是调整后的图像。

六、调整图像通道

在处理图像时,有时候需要对图像进行通道调整,使用cv2.split()函数可以轻松实现该功能。


import cv2

img = cv2.imread('test.jpg')
B,G,R=cv2.split(img)
cv2.imshow("Red",R)
cv2waitKey(0)
cv2.imshow("Green",G)
cv2WaitKey(0)
cv2.imshow("Blue",B)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.split()函数的参数是待调整的图像,函数的返回值是一组分离后的图像通道。

七、图像ROI

在进行图像处理时,有时候需要对感兴趣的区域进行特殊处理,使用ROI(Region of Interest)技术可以将该部分区域分割,以便完成后续操作。


import cv2

img = cv2.imread('test.jpg')
roi = img[100:200,100:200]
cv2.imshow("ROI", roi)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码中,img变量是待处理图像,通过img[x1:x2,y1:y2]的方式选取原图像中的ROI区域,并使用cv2.imshow()函数将ROI区域显示出来。

八、使用cv2.imshow()函数进行视频播放

除了用于单张图片的显示,cv2.imshow()函数还经常用于视频播放。使用OpenCV自带的cv2.VideoCapture()函数能够轻松读取视频,将视频的每一帧转化为灰度图像,再使用cv2.imshow()函数进行显示。


import cv2

cap = cv2.VideoCapture('test.mp4')

while (cap.isOpened()):
    ret,frame = cap.read()
    if ret == False:
        break
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame',gray)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

上述代码中,cv2.VideoCapture()函数读取的是一个test.mp4格式的视频,每次调用cap.read()函数可以读取视频的一个帧,并使用cv2.cvtColor()函数将每一帧转为灰度图像,再使用cv2.imshow()函数进行显示。通过cv2.waitKey()函数,我们可以设置每一帧之间的等待时间,当按下键盘上的'q'键之后,播放会停止。

总结

本篇文章阐述了OpenCV中的cv2.imshow()函数,并通过多种示例展示了其丰富的功能特性。这些示例代码可以在实际项目中作为快速参考,提高我们的编码效率。