????????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函数是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()