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

这篇具有很好参考价值的文章主要介绍了基于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、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/下载完成后双击安装会得到一个文件夹,模板文件夹路径与我程序中的路径相同。

基于opencv的简单人脸检测(python),opencv,python,人工智能

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

检测效果图

基于opencv的简单人脸检测(python),opencv,python,人工智能文章来源地址https://www.toymoban.com/news/detail-815960.html

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

到了这里,关于基于opencv的简单人脸检测(python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包