前言
人脸检测是Opencv的入门项目,本文可以为想学习Opencv的朋友提供一个基础的项目联系,也可以让零基础的朋友感受Opencv究竟是个什么东西。每一行代码都详细解释了,哪怕是你没有一点基础也可以彻底搞懂。
一、环境配置
因为是由python实现,所以我们需要安装pycharm,然后跟着下面的步骤创建环境并且安装cv2库。
1.创建虚拟环境:
打开 Anaconda Prompt(或命令提示符,如果 Anaconda 已添加到系统路径中)。
输入以下命令创建一个名为 myenv 的新环境(你可以将 myenv 替换为你想要的环境名称):
conda create --name myenv
当提示时,输入 y 确认安装。
2.激活环境:
创建环境后,输入以下命令激活环境:
conda activate myenv
3.安装 OpenCV:
在激活的环境中,输入以下命令安装 OpenCV:
conda install -c conda-forge opencv
到这里我们就完成了准备工作。
二、代码解释
1.引入库
import cv2
2.定义人脸检测函数 face_detect_demo:
def face_detect_demo():
# 加载人脸检测分类器
face_detect = cv2.CascadeClassifier("F:/pycharm/Anaconda/envs/study/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml")
这一步使用 cv2.CascadeClassifier 类加载了 OpenCV 预训练的人脸检测分类器。这个分类器是通过大量的人脸和非人脸图像进行训练得到的,能够快速检测图像中的人脸区域。
注意!!!人脸分类器是你下载的Opencv的库里面自带的你只需要找到它的位置就行了。在你下载Anaconda的地址找到envs,再找你自己环境的名字然后跟着上面的路径找就可以找到。
# 在输入图像上进行人脸检测
faces = face_detect.detectMultiScale(src)
这里调用 detectMultiScale 方法在输入图像 src(在主程序中定义)上进行人脸检测。这个方法会返回一个列表,其中每个元素都是一个包含检测到的人脸区域的坐标和大小的四元组 (x, y, w, h),分别表示人脸区域左上角的横坐标、纵坐标、宽度和高度。
# 遍历检测到的人脸区域,绘制矩形框
for x, y, w, h in faces:
cv2.rectangle(src, (x, y), (x + w, y + h), (0, 0, 255), 2)
对于检测到的每一个人脸区域,使用 cv2.rectangle 函数在原始图像 src 上绘制一个矩形框。参数 (x, y) 是矩形框的左上角坐标,(x + w, y + h) 是矩形框的右下角坐标,(0, 0, 255) 是矩形框的颜色(红色),2 是矩形框的线宽。
# 显示标注了人脸的图像
cv2.imshow("face_detect", src)
最后,使用 cv2.imshow 函数显示标注了人脸的图像,窗口名为 “face_detect”。
3.主程序部分:
src = cv2.imread("E:\Vision\Opencv_face\picture.jpg")
这里使用 cv2.imread 函数读取指定路径下的图片,并将其存储在变量 src 中。这个变量将作为输入图像传递给人脸检测函数。
cv2.imshow("input image", src)
显示原始读取的图片,窗口名为 “input image”。
face_detect_demo()
调用人脸检测函数,对输入图像进行人脸检测和标注。
cv2.waitKey(0)
使用 cv2.waitKey(0) 等待用户按下任意键。在等待期间,程序会保持窗口显示状态,直到用户按下一个键。
cv2.destroyAllWindows()
最后,使用 cv2.destroyAllWindows 关闭所有打开的窗口,释放资源。
完整代码
import cv2
def face_detect_demo():
# gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
face_detect = cv2.CascadeClassifier(
"F:/pycharm/Anaconda/envs/study/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml")
faces = face_detect.detectMultiScale(src)
for x, y, w, h in faces:
cv2.rectangle(src, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.imshow("face_detect", src)
src = cv2.imread("E:\Vision\Opencv_face\picture.jpg") # 读取图片位置
cv2.imshow("input image", src)
face_detect_demo()
cv2.waitKey(0)
cv2.destroyAllWindows()
三、结果示例
哈哈这里的结果不是很理想,在后面我会进行改进。
总结
大家有任何问题都可以在评论区和私信跟我联系,互相交流学习,本人也是研一刚开始学视觉的菜鸟一枚。