Python基于OpenCV实现人脸检测并保存

2023-12-17Python编程
45

首先,我们需要安装Python和OpenCV库。前者可以在官网下载安装程序,后者可以使用pip命令进行安装,在命令行中运行以下命令即可:

pip install opencv-python

接下来的步骤,我们将分为以下三个部分进行:

1. 读取图像并进行人脸检测

我们将使用OpenCV中的CascadeClassifier类来检测人脸。在此之前,我们需要下载人脸检测器的分类器文件(.xml)并将其放置在项目目录中。

import cv2

# 加载人脸检测器分类器文件
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

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

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

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

# 在图像上标记出人脸
for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

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

在上述代码中,我们首先加载了人脸检测器分类器文件,并读取了一张图像。然后,我们将图像转换为灰度图像,这是因为人脸检测器通常需要处理灰度图像来提高检测率。接下来,我们使用CascadeClassifier类的detectMultiScale()方法检测人脸,并将检测结果保存在一个元组中。最后,我们在原图像上使用rectangle()方法标记出检测到的人脸,并将其显示出来。

2. 成功检测人脸后对图像进行操作

在检测到人脸后,我们可以根据具体需求对图像进行操作。例如,我们可以在人脸周围添加一个矩形框,并将处理后的图像保存到本地。

import cv2

# 加载人脸检测器分类器文件
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

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

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

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

# 在图像上标记出人脸
for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

# 保存处理后的图像
cv2.imwrite('result.jpg', img)

在以上代码中,我们将原图像中检测到的人脸周围添加了一个蓝色矩形框,并将处理后的图像保存到了本地。

3. 检测并保存视频中的人脸

在检测和处理图像的基础上,我们还可以将其应用于视频中。下面的代码可以读取视频文件,检测并保存其中的人脸。

import cv2

# 加载人脸检测器分类器文件
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 打开摄像头或者读取视频文件
cap = cv2.VideoCapture(0)

# 定义视频编码器及输出文件名称
fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
out = cv2.VideoWriter('output.avi', fourcc, 10.0, (640,480))

while True:
    # 读取一帧图像
    ret, frame = cap.read()

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

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

    # 在图像上标记出人脸
    for (x,y,w,h) in faces:
        cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)

    # 显示图像
    cv2.imshow('frame',frame)

    # 将处理后的图像保存到视频文件中
    out.write(frame)

    # 按下q键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()

注意,在以上代码中,我们使用了VideoWriter类来将处理后的图像保存为视频文件。运行程序时,按下q键可以退出循环。

The End

相关推荐

解析Python中的eval()、exec()及其相关函数
Python中有三个内置函数eval()、exec()和compile()来执行动态代码。这些函数能够从字符串参数中读取Python代码并在运行时执行该代码。但是,使用这些函数时必须小心,因为它们的不当使用可能会导致安全漏洞。...
2023-12-18 Python编程
117

Python下载网络文本数据到本地内存的四种实现方法示例
在Python中,下载网络文本数据到本地内存是常见的操作之一。本文将介绍四种常见的下载网络文本数据到本地内存的实现方法,并提供示例说明。...
2023-12-18 Python编程
101

Python 二进制字节流数据的读取操作(bytes与bitstring)
来给你详细讲解下Python 二进制字节流数据的读取操作(bytes与bitstring)。...
2023-12-18 Python编程
120

Python3.0与2.X版本的区别实例分析
Python 3.x 是 Python 2.x 的下一个重大版本,其中有一些值得注意的区别。 Python 3.0中包含了许多不兼容的变化,这意味着在迁移到3.0之前,必须进行代码更改和测试。本文将介绍主要的差异,并给出一些实例来说明不同点。...
2023-12-18 Python编程
34

python如何在终端里面显示一张图片
要在终端里显示图片,需要使用一些Python库。其中一种流行的库是Pillow,它有一个子库PIL.Image可以加载和处理图像文件。要在终端中显示图像,可以使用如下的步骤:...
2023-12-18 Python编程
91

Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
在Python中,我们可以使用Pillow库来进行图像处理。具体实现两幅图像合成一幅图像的方法如下:...
2023-12-18 Python编程
103