Python 计算机视觉系列之 OpenCV 实现人脸追踪

1. 前言

人脸识别是计算机视觉的重要领域,而 OpenCV 是一个非常出色的计算机视觉框架,我们用 OpenCV 可以很容易的实现人脸的识别。同时我们也可以使用 OpenCV 读取视频,对视频逐帧进行人脸识别,这样就能达到人脸追踪的效果。

2. OpenCV 介绍

OpenCV 是一个非常出色的计算机视觉框架,里面提供了大量图像方面的操作。从基础的读取到修改参数再到高级的物体检测、边缘检测等,我们基础的 OpenCV 只提供了图像处理和一些图像方面的算法实现,要进行人脸识别我们需要安装两个模块:

pip install opencv-python
pip install opencv-contrib-python

其中 opencv-python 就是我们的基础库,而 opencv-contrib-python 是额外的库,里面就包含了人脸识别的函数。下面我们看看 OpenCV 的基础操作。

2.1 图像处理

我们实现人脸追踪是针对视频的,但是视频都是有一帧一帧图片组成,所以我们需要先对图像的操作有个简单的了解:

# 导入模块
import cv2
# 读取图片
im = cv2.imread('xscn.png')

# 输出图片的高宽和通道数
width = im.shape[1]        # 宽
height = im.shape[0]    # 高
num = im.shape[2]    # 通道数
# 修改图片大小
re_im = cv2.resize(im, (width//2, height//2))
# 将图片写入文件
cv2.imwrite('xscn_copy.png', re_im)

# 显示图片
cv2.imshow('im', re_im)
cv2.waitKey(0)
cv2.destroyAllWindows()

在我们导入的时候是导入cv2,读取图片的函数为imread,传入图片的路径,调用该函数后会返回一个ndarray对象。在返回的对象中,shape属性包含了宽高和通道数的信息。

在 OpenCV 中大多数操作都是直接使用模块中的函数操作ndarray对象,在显示图片时我们通常有三个步骤。首先是使用imshow显示图片,该函数传入窗口名和图片的ndarray对象。调用imshow函数图像只会显示一瞬间,我们需要调用waitKey让图片显示有一个时长,传入的参数为毫秒数,当传入 0 时表示无限等待。最后就是回收内存,因为 OpenCV 底层是 C++,所以我们需要回收窗口内存。

2.2 绘制形状

为了看起来更直观,我们需要将人脸绘制出来,我们来看看 opencv 中如何在图片上绘制形状。

你可能感兴趣的:(Python 计算机视觉系列之 OpenCV 实现人脸追踪)