一、OpenCV介绍
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它主要用于实时的图像处理和计算机视觉任务。虽然OpenCV本身更多地聚焦于图像处理和视觉任务,但它也提供了与机器学习相关的功能,使得开发者能够利用它来执行一些基本的机器学习任务。
二、OpenCV运用
OpenCV广泛应用于图像处理、视频分析、目标检测、机器学习等多个领域。这里我们先为大家介绍图像处理,与视频分析等相关运用。
1.读取保存图片
以下代码片段主要展示了如何使用OpenCV(通常用cv2来表示)来读取、显示和保存图像,并打印了图像的一些基本属性。
import cv2
import numpy as np
a = cv2.imread('2.png')
print(a)
cv2.imshow("Mech Maiden",a)
b = cv2.waitKey(5000)
print(b)#
"""
调整模型观察shape,dtype,size属性
"""
print("图像形状(shape):",a.shape)
print("图像数据类型(dtype):",a.dtype)
print("图像大小(size):",a.size)
cv2.imwrite(r'./a', a)
-
图像显示:cv2.imshow() 函数用于在窗口中显示图像。你需要确保在调用 cv2.waitKey()或类似函数之前调用它,因为窗口是事件驱动的,并且只有在有事件(如按键事件)发生时才会更新或保持开启状态。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/03b25290f1d749029fb4de62c164519f.png -
按键等待:cv2.waitKey(0)会无限期地等待用户按键。如果你指定了一个非零参数(如5000毫秒),则函数会等待指定的毫秒数,或者直到用户按键为止(以先到者为准)。如果在这段时间内按下了键,则返回该键的ASCII码;如果没有按键,则返回-1。
-
图像保存:cv2.imwrite() 需要两个参数:文件路径和要写入的图像。确保为文件指定了正确的扩展名,以便操作系统知道如何处理该文件。
-
销毁窗口:在程序结束之前,使用 cv2.destroyAllWindows()销毁所有OpenCV创建的窗口是一个好习惯。这有助于释放与窗口相关的资源。如果你只想销毁特定窗口,可以使用
cv2.destroyWindow(windowName)。
2.读取视频
下面这段代码通过OpenCV库实现了视频文件的打开、逐帧读取、灰度转换、显示以及按键控制视频播放的功能。用户可以通过按下Esc键来停止视频播放并退出程序。同时,在程序结束前,它还负责释放视频文件资源和销毁所有OpenCV创建的窗口,以确保资源得到妥善管理。
# 打开视频文件
video = cv2.VideoCapture('F:/code/pachong/video.mp4')
# 检查是否打开成功
if not video.isOpened():
print("无法打开视频文件")
exit()
# 循环读取视频帧
while True:
ret, frame = video.read() # ret是布尔值,表示是否成功读取,frame是读取到的帧
# 检查是否成功读取帧
if not ret:
break
# 转换灰度图
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('Video', frame)
if cv2.waitKey(30) == 27:
break
video.release()
cv2.destroyAllWindows()
- 打开视频文件:使用cv2.VideoCapture函数尝试打开指定路径的视频文件,这里的’F:/code/pachong/video.mp4’是视频文件的路径
- 读取视频文件:检查视频文件是否成功打开,然后进入无限循环,逐帧读取视频,使用video.read()方法尝试读取视频中的下一帧 ,它返回两个值ret和frame,ret是一个布尔值,如果正确读取到帧,则为True;如果文件结束或发生错误,则为False ,frame是读取到的帧,它是一个numpy数组 ,如果ret为False,则跳出循环,表示视频已经播放完毕或读取过程中发生了错误。
- 灰度图转换:将帧从BGR颜色空间转换为灰度图,并展示灰度图。
- 结束视频播放:程序会暂停30毫秒等待用户输入,如果在30毫秒内有按键被按下,则返回按键的ASCII码;如果没有按键被按下,则返回-1,这里特别检查是否按下了Esc键(ASCII码为27),如果是,则跳出循环,结束视频播放 。
3.图像切片
这段代码是从一个图像文件中读取图像,并从这个图像中裁剪出一个特定的区域,然后显示原始图像和裁剪后的图像。
a = cv2.imread(r'./2.png')
b = a[400:800, 1000:3000]
cv2.imshow('yuantu', a)
cv2.imshow('qiepian', b)
cv2.waitKey(10000)
cv2.destroyAllWindows()
-
读取图像:a = cv2.imread(r’./2.png’) 尝试从当前目录下读取名为 2.png 的图像文件,并将其存储在变量 a
中。 -
裁剪图像:b = a[400:800, 1000:3000] 尝试从图像 a
中裁剪出一个区域,这个区域的起始行是400,结束行是800(但不包括800),起始列是1000,结束列是3000(但不包括3000)。
-
显示图像:使用 cv2.imshow 函数分别显示原始图像 a 和裁剪后的图像 b。
-
等待按键:cv2.waitKey(10000)
使窗口保持打开状态10000毫秒(即10秒),等待用户按键。如果用户在这个时间内按下任意键,cv2.waitKey
将返回按键的ASCII码;如果超时,则返回-1。 -
销毁窗口:cv2.destroyAllWindows() 销毁所有OpenCV创建的窗口。