OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由一系列的C函数和少量C++类构成,同时提供Python、Java和MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
在windows系统下,建议使用python的包安装工具pip来安装Opencv。win+r输入cmd打开命令行输入
pip install opencv-python
安装完成后打开编译器,我这里使用的是SublimeText,Sublime Text 是一个文本编辑器,同时也是一个先进的代码编辑器。Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。最大的好处就是轻便,比较小,下载起来也比较方便。
首先导入opencv库
import cv2 as cv
加载图片并调用封装好的人脸检测函数,注释掉的部分可以用来修改图片大小并保存
#加载图片
img=cv.imread('face3.jpg')
'''resize_img=cv.resize(img,dsize=(400,400))
cv.imwrite('wes1.jpg',resize_img)'''
face_detect_demo()
人脸检测函数,其中CascadeClassifier()方法中调用的是opencv开源的人脸检测模板这里选择的是默认正脸模板xml文件。可以自行到opencv官网下载。https://opencv.org/releases/下载完成后双击安装会得到一个文件夹,模板文件夹路径与我程序中的路径相同。
def face_detect_demo():
#将图片转换为灰度图片
gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
#加载特征数据
face_detector=cv.CascadeClassifier('D:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
#face=face_detector.detectMultiScale(gray,scaleFactor=1.02,minSize=(151,151))
face=face_detector.detectMultiScale(gray,scaleFactor=1.03,minNeighbors=3,maxSize=(45,45))
#face=face_detector.detectMultiScale(gray)
for x,y,w,h in face:
print(x,y,w,h)
cv.rectangle(img,(x,y),(x+w,y+h),color=(0,255,0),thickness=2)
#cv.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,255,0),thickness=2)
cv.imshow('result',img)
detectMultiScale函数概述
detectMultiScale函数是OpenCV中用于目标检测的函数,它可以用来检测图像中是否存在指定的目标,并返回目标位置的矩形边界框。函数定义如下:
detectMultiScale(image, scaleFactor, minNeighbors, flags, minSize, maxSize)
scaleFactor参数控制每个图像序列的缩放比例。该参数决定了在每个图像序列中检测窗口的大小。默认值为1.1,表示每次图像被缩小10%。较小的值可以捕捉更多的细节,但也会增加计算量。较大的值可以加快检测速度,但可能会错过一些目标。示例代码如下:
face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)
minNeighbors参数定义了每个目标至少应该有多少个邻居,才能被认为是一个目标。该参数用于过滤检测到的目标。较大的值可以过滤掉一些误检测,但可能会导致一些目标被漏检。 默认为3。示例代码如下:
face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)
minSize参数用于指定检测目标的最小尺寸。目标小于该尺寸的将被忽略。该参数可以用于过滤一些过小的目标。 示例代码如下:
face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(30, 30))
maxSize参数用于指定检测目标的最大尺寸。目标大于该尺寸的将被忽略。该参数可以用于过滤一些过大的目标。 文章来源:https://www.toymoban.com/news/detail-815960.html
face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, maxSize=(300, 300))
完整代码
import cv2 as cv
def face_detect_demo():
#将图片转换为灰度图片
gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
#加载特征数据
face_detector=cv.CascadeClassifier('D:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
#face=face_detector.detectMultiScale(gray,scaleFactor=1.02,minSize=(151,151))
face=face_detector.detectMultiScale(gray,scaleFactor=1.03,minNeighbors=3,maxSize=(45,45))
#face=face_detector.detectMultiScale(gray)
for x,y,w,h in face:
print(x,y,w,h)
cv.rectangle(img,(x,y),(x+w,y+h),color=(0,255,0),thickness=2)
#cv.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,255,0),thickness=2)
cv.imshow('result',img)
#加载图片
img=cv.imread('face3.jpg')
'''resize_img=cv.resize(img,dsize=(400,400))
cv.imwrite('wes1.jpg',resize_img)'''
face_detect_demo()
cv.waitKey(0)
cv.destroyAllWindows()
检测效果图
文章来源地址https://www.toymoban.com/news/detail-815960.html
通过对detectMultiScale函数参数的调整可以实现同一张图多张人脸的检测效果,根据不同的图片调整不同的参数即可。
到了这里,关于基于opencv的简单人脸检测(python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!