计算机视觉与OpenCV库的应用

计算机视觉是人工智能和计算机科学的一个分支,它使计算机能够理解视觉世界。它是机器学习的主要组成部分之一,处理自然世界的图像(高维数据)。它执行各种任务,如获取、分析和处理,以理解图像并将它们转换成数值或符号信息。

当今的计算机视觉算法基于模式识别,通常依赖于卷积神经网络(CNN)。由于该领域的各种进步,计算机视觉正在蓬勃发展,在过去几年中其受欢迎程度呈指数级增长。其应用范围从缺陷检测到入侵者检测,口罩检测到肿瘤检测,作物监测到植物监测,车辆分类到交通流量分析等。这项技术主要用于零售和制造业、交通、媒体、农业、医疗保健、体育、银行、增强现实、家庭安全等领域。

Python包含了一个名为OpenCV的库,用于计算机视觉领域的工作。这是一个开源库,于1999年推出。可以执行图像处理、图像分析、视频分析等任务。这个库主要是用C++编写的,并且有C++、Python、Java和MATLAB接口可供使用。

OpenCV可以轻松使用pip命令安装,如下所示:

pip install opencv-python

使用OpenCV处理图像时,可以执行许多操作。其中,将讨论以下内容:

  • 读取图像
  • 调整图像大小
  • 旋转图像
  • 翻转图像
  • 重写图像
  • 裁剪图像
  • 在图像上绘制各种形状

以下是使用OpenCV读取图像的示例代码:

import cv2 img = cv2.imread('img.jpeg') cv2.imshow('Image', img) cv2.waitKey() cv2.destroyAllWindows()

图像处理中,通常需要调整图像大小。OpenCV为提供了几种方法来轻松调整图像大小。让通过一个示例来理解。

img2 = cv2.resize(img, (400, 400)) # 按原始大小的比例调整大小 img3 = cv2.resize(img, (0, 0), fx=0.5, fy=0.6) # 使用INTER_AREA缩小图像 img4 = cv2.resize(img, (600, 700), interpolation=cv2.INTER_AREA)

使用OpenCV旋转图像的语法如下:

M = cv2.getRotationMatrix2D(center, angle, scale) img_rotated = cv2.warpAffine(src, M, (h, w))

让通过一个示例深入了解:

# 计算高度和宽度以获得中心 (h, w) = img.shape[:2] center = (w / 2, h / 2) # 旋转90度 M = cv2.getRotationMatrix2D(center, 90, 1.0) img90 = cv2.warpAffine(img, M, (h, w)) # 旋转180度 M = cv2.getRotationMatrix2D(center, 180, 1.0) img180 = cv2.warpAffine(img, M, (h, w)) # 旋转270度 M = cv2.getRotationMatrix2D(center, 270, 1.0) img270 = cv2.warpAffine(img, M, (h, w))

要翻转图像,使用函数cv2.flip()并传递参数,即图像和翻转代码(水平或垂直):

# 水平翻转 img = cv2.flip(img, 0) # 垂直翻转 img = cv2.flip(img, 1)

要重写图像到新文件,使用函数imwrite()如下:

cv2.imwrite('new_img.jpg', img)

裁剪图像:

# 从顶部裁剪 img = img[0:100, 0:100] # 指定高度和宽度裁剪 img = img[50:200, 50:100]

使用OpenCV,可以快速在图像上绘制各种形状,如圆形、矩形、多边形等,使用不同的函数。让通过一个示例来理解:

# 创建一个空白图像 import cv2 as cv2 import numpy as np img = np.zeros((500, 500, 3), dtype=float) # 将图像颜色更改为绿色 img[:] = 0, 255, 0 # 红色 img[:] = 0, 0, 255 # 更改特定部分的颜色 img[200:300, 300:450] = 0, 255, 0 # 绘制矩形 cv2.rectangle(img, (100, 100), (180, 180), color=(255, 0, 0), thickness=5) # 用颜色填充绘制圆形 cv2.circle(img, center=(100, 300), radius=60, color=(0, 255, 0), thickness=-1) # 绘制线条 cv2.line(img, (0, 0), (317, 356), thickness=3, color=(0, 255, 0)) # 添加文本 cv2.putText(img, org=(50, 50), fontScale=3, color=(255, 0, 0), thickness=2, lineType=cv2.LINE_AA, text="IMAGES", fontFace=cv2.FONT_HERSHEY_COMPLEX_SMALL) cv2_imshow(img) cv2.waitKey(0)

视频是一系列帧或一系列图像的序列。图像通常以BGR(蓝色、绿色、红色)的形式存在。每个像素的值在0-255之间。要开始使用OpenCV处理视频,使用以下函数:

  • Cv2.VideoCapture():建立与视频的连接。它接受一个参数,指示是否使用内置摄像头或附加摄像头。值‘0’表示内置摄像头。
  • Cap.read():此方法允许获取一帧。
  • Cv2.cvtColor():允许更改图像使用的颜色模型。这包括从BGR转换到RGB和灰度。

在处理视频时,将学习如何捕获视频帧的不同属性、读取视频文件和写入视频。

以下是捕获视频帧属性的一些示例。要捕获帧的形状:

frame.shape (2160, 3840, 3) plt.imshow(frame) plt.show()

要更改帧的颜色,使用函数cv2.cvtColor()如下所示:

# 更改帧的颜色 plt.show() plt.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY))

要捕获视频,使用函数cv2.VideoCapture():

cap = cv2.VideoCapture('/content/video.mp4') cap.read()

要获取帧的高度,使用cap.get()函数如下:

# 高度 cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

要获取帧的宽度,使用:

# 宽度 cap.get(cv2.CAP_PROP_FRAME_WIDTH)

要获取帧数,使用函数cap.get()如下:

# 帧数 cap.get(cv2.CAP_PROP_FRAME_COUNT)

要获取每秒帧数,使用:

# 每秒帧数 cap.get(cv2.CAP_PROP_FPS)

以下是读取视频文件的示例代码:

# 导入依赖 import cv2 from matplotlib import pyplot as plt # 建立捕获 cap = cv2.VideoCapture('/content/video.mp4') # 循环遍历每个帧 while(cap.isOpened()): ret, frame = cap.read() frame = cv2.resize(frame, (1200, 700)) cv2.imshow('Video', frame) if cv2.waitKey(10) & 0xFF == ord('q'): break # 关闭所有内容 cap.release() cv2.destroyAllWindows() import cv2 from google.colab.patches import cv2_imshow cap = cv2.VideoCapture('/content/video.mp4') height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) fps = int(cap.get(cv2.CAP_PROP_FPS)) frame_size = (width, height) video_writer = cv2.VideoWriter('/content/output.avi', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), fps, frame_size) for frame_idx in range(int(cap.get(cv2.CAP_PROP_FRAME_COUNT))): ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) video_writer.write(gray) if cv2.waitKey(10) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
  • 什么是计算机视觉
  • OpenCV库的应用
  • 使用OpenCV库处理图像
  • 使用OpenCV库处理视频
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485