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()函数,并通过多种示例展示了其丰富的功能特性。这些示例代码可以在实际项目中作为快速参考,提高我们的编码效率。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/183685.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-25 05:48
下一篇 2024-11-25 05:48

相关推荐

  • 如何在PyCharm中安装OpenCV?

    本文将从以下几个方面详细介绍如何在PyCharm中安装OpenCV。 一、安装Python 在安装OpenCV之前,请确保已经安装了Python。 如果您还没有安装Python,可…

    编程 2025-04-29
  • Python OpenCV 直线检测

    本文将介绍在Python OpenCV中进行直线检测的方法,主要涉及到图像的边缘检测、霍夫变换和绘制直线等操作。 一、边缘检测 由于直线检测是从图像的边缘开始的,因此必须先找到图像…

    编程 2025-04-29
  • Opencv 实现读取 BMP 图片

    Opencv 是一个基于 C/C++ 语言的开源计算机视觉库,可以用于图像处理、特征识别、目标跟踪、机器学习等领域。在图像处理中,读取 BMP 图片是常见操作之一。 一、打开 BM…

    编程 2025-04-27
  • opencv鼠标绘图

    本文将为您详细介绍如何使用opencv在原始图片上进行鼠标绘图。 一、准备工作 在开始绘制之前,您需要先准备好以下的工作: 1、安装opencv库,可以通过pip install …

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25

发表回复

登录后才能评论