python实现面部特效_Python使用OpenCV实现简单的人脸检测

文章目录:

本文使用的环境是:Windows+Python3.x+Anaconda

安装Python以及Anaconda的步骤本文不予以讲解了,下面主要讲的是OpenCV的安装以及使用。

OpenCV安装

安装numpy

如果没有numpy的话要先下载numpy,一般安装完Anaconda后就会自带很多库,这也是我推荐使用Anaconda的原因。(通过conda list命令可以查看Anaconda已经安装完成的库)

pip install numpy

安装opencv

pip install opencv-python

如果通过上述命令无法安装,可以直接下载whl包安装,安装whl包依然使用pip

下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/

如果不想下载可以直接使用我下载好的(里面包含了人脸训练模型)。

下载完成后可以使用下列命令安装

pip install 包的位置(如:pip install D:\whl\opencv_python-3.4.1-cp36-cp36m-win_amd64.whl)

可能存在的错误

(1) Script file ‘D:\Anaconda3\Scripts\pip-script.py’ is not present.

输入下列命令

easy_install pip

(2)缺少ipykernel库

运行下列命令下载

pip install ipykernel

OpenCV使用

OpenCV测试

#导入cv模块

import cv2 as cv

#读取图像,支持 bmp、jpg、png、tiff 等常用格式

img = cv.imread("D:\\picture\\318394.jpg")

#输出OpenCV的版本号

print(cv.__version__)

#创建窗口并显示图像

cv.namedWindow("Image")

cv.imshow("Image",img)

cv.waitKey(0)

#释放窗口

cv.destroyAllWindows()

效果图:

注意:

如果在使用Opencv的过程中出现OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file ……..\opencv\modules\highgui\src\window.cpp, line 261,则是文件路径有误,

应将图片路径:“D:\pics\test.png”改为“D:\pics\test.png”

图片人脸检测

程序要求:

识别一种图上的所有人的脸,并且标出人脸的位置,画出人眼以及嘴的位置,展示效果图如下:

技术实现思路

图片转换成灰色(降低为一维的灰度,减低计算强度)

图片上画矩形

使用训练分类器查找人脸

注意

在使用OpenCV的人脸检测之前,需要一个人脸训练模型,格式是xml的,我们这里使用OpenCV提供好的人脸分类模型xml,下载地址:https://github.com/opencv/opencv/tree/master/data/haarcascades 可全部下载到本地。我之前分享的网盘里提供了,要使用的人脸训练模型。

完整代码:

import cv2

filepath = "D:\\picture\\318394.jpg"

img = cv2.imread(filepath) # 读取图片

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换灰色

# OpenCV人脸识别分类器

classifier = cv2.CascadeClassifier( "D:\openvc\haarcascade_frontalface_default.xml" )

color = (0, 255, 0) # 定义绘制颜色

# 调用识别人脸

faceRects = classifier.detectMultiScale( gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))

if len(faceRects): # 大于0则检测到人脸

for faceRect in faceRects: # 单独框出每一张人脸

x, y, w, h = faceRect

# 框出人脸

cv2.rectangle(img, (x, y), (x + h, y + w), color, 2)

# 左眼

cv2.circle(img, (x + w // 4, y + h // 4 + 30), min(w // 8, h // 8), color)

#右眼

cv2.circle(img, (x + 3 * w // 4, y + h // 4 + 30), min(w // 8, h // 8), color)

#嘴巴

cv2.rectangle(img, (x + 3 * w // 8, y + 3 * h // 4), (x + 5 * w // 8, y + 7 * h // 8), color)

cv2.imshow("image", img) # 显示图像

c = cv2.waitKey(10)

cv2.waitKey(0)

cv2.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值