Python计算机视觉 第10章-OpenCV
OpenCV 是一个C++ 库,用于(实时)处理计算视觉问题。实时处理计算机视觉的 C++ 库,最初由英特尔公司开发,现由 Willow Garage 维护。OpenCV 是在 BSD 许可下发布的开源库,这意味着它对于学术研究和商业应用是免费的。
10.1 OpenCV的Python接口
OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉库,提供了大量的图像和视频处理功能。其 Python 接口使得用户能够方便地在 Python 中使用 OpenCV 的功能。OpenCV Python 接口通过 cv2
模块提供了对各种计算机视觉算法和工具的访问,包括图像处理、视频分析、机器学习等。
使用
#直接pip没法安装下来
pip install cv2
#需要按照如下命令安装才会成功
pip install opencv-python
如果安装速度太慢可以使用清华源:
pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple
10.2 OpenCV基础知识
主要功能:
-
图像读取和显示
- 读取图像:
cv2.imread()
- 显示图像:
cv2.imshow()
- 保存图像:
cv2.imwrite()
- 读取图像:
-
图像处理
- 图像转换:
cv2.cvtColor()
- 图像平滑:
cv2.GaussianBlur()
,cv2.medianBlur()
- 边缘检测:
cv2.Canny()
- 图像转换:
-
几何变换
- 图像缩放:
cv2.resize()
- 旋转和仿射变换:
cv2.warpAffine()
- 透视变换:
cv2.warpPerspective()
- 图像缩放:
-
特征检测与描述
- 角点检测:
cv2.cornerHarris()
- 特征匹配:
cv2.BFMatcher()
,cv2.FlannBasedMatcher()
- 角点检测:
-
视频处理
- 捕捉视频:
cv2.VideoCapture()
- 播放视频:
cv2.imshow()
(与图像处理相同)
- 捕捉视频:
-
机器学习与深度学习
- 加载预训练模型:
cv2.dnn.readNet()
- 进行推理:
cv2.dnn.forward()
- 加载预训练模型:
示例代码如下:
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
image = cv2.imread('test.jpg')
# 显示原图
cv2.imshow('Original Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 图像平滑
smoothed_image = cv2.GaussianBlur(gray_image, (5, 5), 0)
# 边缘检测
edges = cv2.Canny(smoothed_image, 100, 200)
# 显示处理结果
fig, axs = plt.subplots(1, 3, figsize=(15, 5))
axs[0].imshow(cv2.cvtColor(gray_image, cv2.COLOR_BGR2RGB), cmap='gray')
axs[0].set_title('Gray Image')
axs[0].axis('off')
axs[1].imshow(cv2.cvtColor(smoothed_image, cv2.COLOR_BGR2RGB), cmap='gray')
axs[1].set_title('Smoothed Image')
axs[1].axis('off')
axs[2].imshow(cv2.cvtColor(edges, cv2.COLOR_BGR2RGB), cmap='gray')
axs[2].set_title('Edges')
axs[2].axis('off')
plt.show()
处理结果如下:
实验图1 示例代码处理结果
其中:
-
读取图像:
cv2.imread('test.jpg)
-
转换为灰度图:
cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
-
图像平滑:
cv2.GaussianBlur(gray_image, (5, 5), 0)
-
边缘检测:
cv2.Canny(smoothed_image, 100, 200)
-
显示结果:使用
matplotlib
展示灰度图、平滑图像和边缘检测结果
10.3 处理视频
OpenCV 提供了全面的视频处理功能,主要包括以下几个方面:
-
读取视频:
- 打开视频文件或摄像头进行视频流读取。
- 使用
cv2.VideoCapture()
进行视频捕捉。
-
显示视频:
- 显示视频帧或视频流。
- 使用
cv2.imshow()
显示每一帧图像。
-
处理视频:
- 对视频帧进行各种图像处理操作,如颜色转换、滤镜应用、对象检测等。
-
写入视频:
- 将处理后的视频保存到文件中。
- 使用
cv2.VideoWriter()
进行视频编写和保存。
-
视频属性获取:
- 获取视频的帧率、分辨率、总帧数等信息。
- 通过
cv2.CAP_PROP_FPS
、cv2.CAP_PROP_FRAME_WIDTH
、cv2.CAP_PROP_FRAME_HEIGHT