OpenCV简单学习

OpenCV简介

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和图像处理库,它提供了丰富的函数和工具,用于处理图像和视频、进行特征提取、目标检测、图像分割、三维重建、机器学习等计算机视觉相关任务。

OpenCV支持多种编程语言,包括C++PythonJava等,使其适用于不同的开发环境和平台。它具有跨平台性,可以在Windows、Linux、macOS等操作系统上使用,并且提供了丰富的函数库和工具,方便开发者快速实现各种计算机视觉任务。

OpenCV的功能非常丰富,包括图像处理、视觉特征、目标检测、摄像机标定、三维重建、机器学习等。它提供了各种算法和技术,如图像滤波、边缘检测、图像变换、特征点检测与描述、人脸检测与识别、物体追踪、摄像机姿态估计、立体视觉等。开发者可以使用OpenCV进行图像和视频处理,实现各种视觉应用。

接下来就是一个简单的示例,以及具体的操作步骤

OpenCV简单案例

OpenCV简单案例

第一步:安装OpenCV库

使用pip命令在终端中执行以下命令进行安装

1
pip install opencv-python

第二步:导入OpenCV库

在python代码中导入库

1
import cv2

第三步:读取图像或者视频

这里就以图片为例,简单进行。

使用cv2.imread()函数读取图像文件

1
2
# 读取图像
img = cv2.imread('image.jpg')

第四步:处理图像或者视频

可以使用函数进行图像滤波、边缘检测、图像变换等操作,或者使用算法进行目标检测、人脸识别等任务。

这里就是仅仅信息图像的一个灰色处理

1
2
# 图像处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

第五步:显示或者保存结果

使用cv2.imshow()函数显示图像,或者使用cv2.VideoWriter()函数保存处理后的视频

1
2
3
4
5
6
# 显示图像
cv2.imshow('Image', img)
cv2.waitKey(0)

# 保存图像
cv2.imwrite('output.jpg', img)

第六步:释放资源

在程序结束时,记得释放所有使用的资源,如关闭打开的视频文件或释放摄像头资源。可以使用cv2.release()函数来释放资源。

1
2
# 释放视频资源
video.release()

完整的简单案例

这是一个完整的简单示例,使用OpenCV进行图像读取、显示和保存的代码:

1
2
3
4
5
6
7
8
9
10
11
import cv2

# 读取图像
img = cv2.imread('image.jpg')

# 显示图像
cv2.imshow('Image', img)
cv2.waitKey(0)

# 保存图像
cv2.imwrite('output.jpg', img)

进阶简单案例

下面是一个进阶更改的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import cv2
from numpy import *
from matplotlib import pyplot as plt

# 设置图片
img = cv2.imread(r'path\img.png') # 更换图片的路径

# bgr转rgb图片,方法一
b,g,r = cv2.split(img)
imag2 = cv2.merge([r,g,b])
plt.imshow(imag2)

# bgr转rgb图片,方法二
image = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

plt.imshow(image)
# 隐藏x轴刻度标签,隐藏y轴刻度标签
plt.xticks([]), plt.yticks([])
plt.show()

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

进阶人脸存在案例

再来进阶一下 ,直接开视频,使用人脸识别,仅识别是否有人脸存在

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import cv2 as cv
import time

# 导入人脸训练库,opencv官网的训练好的人脸库
face_cascade = cv.CascadeClassifier('haarcascade_frontalface_alt.xml')

# 打开摄像头
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("摄像头打开失败")
exit()

fpsTime = time.time()

while True:
# 逐帧捕获
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
print("未能正确读取摄像头(摄像头未正确安装、打开或被占用)")
break

# 提高性能
frame.flags.writeable = False

# 镜像处理
frame = cv.flip(frame, 1)

# 将帧转换为灰度图像
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)

# 人脸检测
faces = face_cascade.detectMultiScale(gray, 1.3, 5)

# 在检测到的人脸周围绘制矩形框
for (x, y, w, h) in faces:
cv.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

# 在检测到的人脸周围绘制矩形框
if len(faces) > 0:
cv.putText(frame, "Find Face", (10, 100), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2, cv.LINE_AA)
else:
cv.putText(frame, "No Find Face", (10, 100), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2, cv.LINE_AA)

# 获取当前帧率
cTime = time.time()
fps_text = 1 / (cTime - fpsTime)
fpsTime = cTime
cv.putText(frame, "FPS: " + str(int(fps_text)), (10, 50), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

# 显示结果帧
cv.imshow("image", frame)

# ESC按键退出
if cv.waitKey(1) & 0xFF == 27:
break
# 完成操作,释放捕获器
cap.release()
cv.destroyAllWindows()

此代码仅供学习,不是高识别的人脸存在识别,也没有进行人脸识别

未完待续。。。