在这篇Python OpenCV文章中,将介绍简单的人脸检测。所以在这篇文章中,我们基本上使用了HaarCascade分类器。人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发展起来。
HaarCascade是什么?
Haar级联基本上是一个分类器,用于从源头检测它所训练的对象。哈尔级联的训练方法是将正图像叠加在一组负图像上。培训通常在服务器和不同的阶段进行。通过使用高质量的图像和增加分类器所训练的阶数,可以得到更好的结果。
你也可以使用Github上提供的预定义Haar Cascades
以下是Python OpenCV人脸检测的完整代码
import cv2
image = cv2.imread("www.linuxmi.com.jpg")
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
faces = face_cascade.detectMultiScale(image, scaleFactor = 1.2, minNeighbors = 6)
print("Faces Detected", len(faces))
for x,y,w,h in faces:
cv2.rectangle(image, (x,y), (x+w, y+h), (0,0,255), 5)
cv2.imshow("www.linuxmi.com , Face Detected", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这行代码中,我们已经加载了图像,你需要在工作目录中有一个图像
image = cv2.imread("www.linuxmi.com.jpg")
这是为了加载我们已经复制到目录中的Haar级联分类器
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
detecMultiScale()函数用于检测目标,如果在图像中找到一个人脸,将以x,y,w,h的形式返回。它需要一些参数。
ScaleFactor:这是一个参数,用于指定在每个图像缩放时图像大小会减少多少。
minNeighbors:参数指定每个候选矩形应该保留多少邻居,这个参数将影响检测到的面孔的质量。
faces = face_cascade.detectMultiScale(image, scaleFactor = 1.2, minNeighbors = 6)
在这个代码中,我们想在图像的眼睛中绘制矩形
for x,y,w,h in faces:
cv2.rectangle(image, (x,y), (x+w, y+h), (0,0,255), 5)
在这行代码中,我们希望显示图像
cv2.imshow("www.linuxmi.com , Face Detected", image)
运行完整的代码,结果如下: