失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 基于opencv实现人脸猫脸图像检测(python)

基于opencv实现人脸猫脸图像检测(python)

时间:2021-06-28 09:15:26

相关推荐

基于opencv实现人脸猫脸图像检测(python)

基于opencv实现人脸猫脸图像检测(python)

目录

基于opencv实现人脸猫脸图像检测(python)

1、方法流程如下

2 、导入相关库

3、 导入级联分类器

4、调整图像大小

5、彩色图像灰度化

6、图像面部识别

7、绘制脸部矩形区域

完整Code:

致谢

1、方法流程如下

2 、导入相关库

这里我们只用到了opencv,所以只需要导入相关的库即可。

安装相关库方法

pip install opencv-python pillow

代码导入

import cv2

3、 导入级联分类器

OpenCV已经包含许多针对面部,眼睛,微笑等进行过预训练的分类器。这些.xml文件存储在GitHub文件夹中。 这里可以使用猫脸检测和人脸检测模型。

猫脸和人脸的链接如下

猫脸:/opencv/opencv/master/data/haarcascades/haarcascade_frontalcatface_extended.xml人脸:/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_default.xml

python导入分类器:cv2.CascadeClassifier()

CascadeClassifier,是Opencv中做人脸检测的时候的一个级联分类器。并且既可以使用Haar,也可以使用LBP特征。

Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。用黑白两种矩形框组合成特征模板,在特征模板内用 黑色矩形像素和 减去 白色矩形像素和来表示这个模版的特征值。例如:脸部的一些特征能由矩形模块差值特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述在特定方向(水平、垂直、对角)上有明显像素模块梯度变化的图像结构。这样就可以进行区分人脸。

catface_cascade = cv2.CascadeClassifier('E:\\car\\catface_detector.xml') humanface_cascade = cv2.CascadeClassifier('E:\\car\\humanface_detector.xml')

4、调整图像大小

cv2.resize(原图像,(w,h))函数,w,h代表长和宽。

将原始图像调整到大小为(600,600)

img_1=cv2.resize(img1,(600,600))

5、彩色图像灰度化

关于彩色图像灰度化部分,这里不在多说,在python中使用cv2.cvtColor()和cv2.COLOR_BGR2GRAY()可以达到想要的目的。

img1=cv2.cvtColor(img_1,cv2.COLOR_BGR2GRAY)

图像灰度化结果:

6、图像面部识别

关于图像面部识别,这里就需要利用我们之前下载好的级联分类器了。humanface_cascade和catface_cascade。

调用detectMultiScale()函数检测:

1.image表示的是要检测的输入图像

2.objects表示检测到的人脸目标序列

3.scaleFactor表示每次图像尺寸减小的比例

4.minNeighbors表示每一个目标至少要被检测到3次才算是真的目标(因为周围的像素和不同的窗口大小都可以检测到人脸),

5.minSize为目标的最小尺寸

6.minSize为目标的最大尺寸

code:

human_faces = humanface_cascade.detectMultiScale(img1,scaleFactor=1.3, minNeighbors=5, minSize=(75, 75)) cat_faces = catface_cascade.detectMultiScale(img2, scaleFactor=1.3, minNeighbors=5, minSize=(75, 75))

7、绘制脸部矩形区域

绘制检测区域用到了cv2.rectangle(),cv2.putText()两个函数。

然后利用cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)画出矩行

参数解释

第一个参数:img是原图

第二个参数:(x,y)是矩阵的左上点坐标

第三个参数:(x+w,y+h)是矩阵的右下点坐标

第四个参数:(0,255,0)是画线对应的rgb颜色

第五个参数:2是所画的线的宽度

cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3)

各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细

for (i, (x, y, w, h)) in enumerate(human_faces): cv2.rectangle(img1, (x, y), (x+1*w, y+1*h), (220, 90, 230), 3)cv2.putText(img1, "Human Face - #{}".format(i + 1), (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.55, (220, 90, 230), 2) for (i, (x, y, w, h)) in enumerate(cat_faces): cv2.rectangle(img2, (x, y), (x+1*w, y+1*h), (0,255, 0), 3) cv2.putText(img2, "Cat Faces - #{}".format(i + 1), (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.55, (0, 0, 255), 2)

绘制结果:

完整Code:

import cv2#Load the cascades catface_cascade = cv2.CascadeClassifier('E:\\car\\catface_detector.xml') humanface_cascade = cv2.CascadeClassifier('E:\\car\\humanface_detector.xml')#调整图像大小img1=cv2.imread('E:/car/boy.jpg')img_1=cv2.resize(img1,(600,600))img2=cv2.imread('E:/car/timg.jpg')img_2=cv2.resize(img2,(600,600))#灰度化img1=cv2.cvtColor(img_1,cv2.COLOR_BGR2GRAY)img2=cv2.cvtColor(img_2,cv2.COLOR_BGR2GRAY)human_faces = humanface_cascade.detectMultiScale(img1,scaleFactor=1.3, minNeighbors=5, minSize=(75, 75)) cat_faces = catface_cascade.detectMultiScale(img2, scaleFactor=1.3, minNeighbors=5, minSize=(75, 75))for (i, (x, y, w, h)) in enumerate(human_faces): cv2.rectangle(img1, (x, y), (x+1*w, y+1*h), (220, 90, 230), 3)cv2.putText(img1, "Human Face - #{}".format(i + 1), (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.55, (220, 90, 230), 2) for (i, (x, y, w, h)) in enumerate(cat_faces): cv2.rectangle(img2, (x, y), (x+1*w, y+1*h), (0,255, 0), 3) cv2.putText(img2, "Cat Faces - #{}".format(i + 1), (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.55, (0, 0, 255), 2)cv2.imshow("faces_detected1.png", img1)cv2.imshow("faces_detected2.png", img2)cv2.waitKey(0)

检测结果

二、快速实现人脸识别(15行代码)

import cv2import matplotlib.pyplot as plt %matplotlib inline face_cascade = cv2.CascadeClassifier('E:\\car\\humanface_detector.xml')img = cv2.imread('E:/car/7.jpg')gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray)print('Number of faces detected:', len(faces))for (i, (x, y, w, h)) in enumerate(faces): cv2.rectangle(img, (x, y), (x+1*w, y+1*h), (220, 90, 230), 3)cv2.putText(img, "Human Face - #{}".format(i + 1), (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.55, (220, 90, 230), 2) cv_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)plt.imshow(cv_rgb)plt.show()

结果:

致谢

Python实现猫脸识别 | 喵主子福利

/Stray_Lambs/article/details/101123252

/weixin_42309501/article/details/80781293

如果觉得《基于opencv实现人脸猫脸图像检测(python)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。