基于opencv的简单人脸检测(python)

        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、LinuxMac 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参数用于指定检测目标的最大尺寸。目标大于该尺寸的将被忽略。该参数可以用于过滤一些过大的目标。 

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()

检测效果图

通过对detectMultiScale函数参数的调整可以实现同一张图多张人脸的检测效果,根据不同的图片调整不同的参数即可。

  • 48
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用OpenCV实现人脸检测Python程序,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装OpenCV。你可以使用pip命令来安装它:pip install opencv-python 2. 导入所需的和模块: import cv2 3. 创建一个人脸检测器对象: detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 4. 打开摄像头并读取视频流: cap = cv2.VideoCapture(0) 5. 创建一个循环来不断检测人脸并显示在新窗口中: while True: ret, img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = detector.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('frame', img) if cv2.waitKey(1) & 0xFF == ord('q'): break 6. 最后,释放摄像头资源并关闭窗口: cap.release() cv2.destroyAllWindows() 这样,你就可以使用OpenCV实现一个简单人脸检测程序了。这个程序会打开摄像头,实时检测人脸,并在视频流中用矩形框标记出人脸的位置。 #### 引用[.reference_title] - *1* *2* *3* [在Python中使用OpenCV进行人脸检测](https://blog.csdn.net/weixin_42170439/article/details/90718710)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值