如何使用OpenCV Python在图像中检测眼睛?
“haar cascade分类器”是一种有效的基于机器学习的目标检测方法。要为眼睛检测训练haar cascade分类器,该算法最初需要许多积极图像(眼睛图像)和负面图像(没有眼睛的图像)。然后从这些积极和否定的图像训练分类器。然后用于在其他图像中检测眼睛。我们可以使用已经训练好的haar cascade进行眼睛检测。
要在输入图像中进行眼睛检测,我们需要两个haar cascades,一个用于面部检测,另一个用于眼睛检测。我们将使用以下两个haar cascade−
- haarcascade_frontalface_alt.xml
-
haarcascade_eye_tree_eyeglasses.xml
如何下载Haarcascades?
您可以在GitHub网站上找到不同的haar cascade−
https://github.com/opencv/opencv/tree/master/data/haarcascades
要下载用于眼睛检测的haar cascade,请单击 haarcascade_eye_tree_eyeglasses.xml 文件。以原始格式打开,右键单击并保存。
注意 − 将所有haar cascade xml文件保存在 haarcascades 文件夹中。
步骤
要在图像中检测眼睛并在它们周围绘制边界框,您可以按照以下步骤进行−
- 导入所需库。在所有以下示例中,所需的Python库是 OpenCV 。请确保您已经安装了它。
-
使用 cv2.imread() 读取灰度输入图像。指定完整图像路径。
-
为面部检测和眼睛检测初始化haar cascade分类器对象 face_cascade = cv2.CascadeClassifier() 和 eye_cascade = cv2.CascadeClassifier 。传递haar cascade xml文件的完整路径。您可以使用haar cascade文件 haarcascade_frontalface_alt.xml 在图像中检测面孔和 haarcascade_eye_tree_eyeglasses.xml 在图像中检测眼睛。
-
使用 face_cascade.detectMultiScale() 检测输入图像中的面部。它以 (x,y,w,h) 格式返回检测到的面部的坐标。
-
将检测到的面部定义为 image[y:y+h, x:x+w] 。现在在检测到的面部区域( roi )内检测眼睛。使用 eye_cascade.detectMultiScale() 。它还以 (ex,ey,ew,eh)
-
使用 cv2.rectangle() 在原始图像中绘制检测到的眼睛周围的边界矩形。
-
显示带绘制眼睛周围的边界矩形的图像。
让我们看看一些示例以更清楚地理解。
示例
在此Python程序中,我们使用haar cascade在输入图像中检测眼睛。
# 导入所需库
import cv2
# 读取输入图像
img = cv2.imread('woman.jpg')
# 将每个帧转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 读取面部haarcascade以便在图像中检测面部
face_cascade = cv2.CascadeClassifier('haarcascades\haarcascade_frontalface_default.xml')
# 读取眼睛haarcascade以便在图像中检测眼睛
eye_cascade = cv2.CascadeClassifier('haarcascades\haarcascade_eye_tree_eyeglasses.xml')
# 检测输入图像中的面部
faces = face_cascade.detectMultiScale(gray, 1.3, 4)
print('Number of detected faces:', len(faces))
# 遍历检测到的面部
for (x,y,w,h) in faces:
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
# 在检测到的面部区域(roi)中检测眼睛
eyes = eye_cascade.detectMultiScale(roi_gray)
# 在眼睛周围画一个矩形
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,255),2)
# 显示具有检测到的眼睛的图像
cv2.imshow('Eyes Detection',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
考虑以下图像为 输入文件 该程序-
当您运行上面的Python程序时,它将生成以下输出窗口−
Number of detected faces: 1
我们得到以下输出窗口,显示图像中检测到的眼睛 –
检测到的眼睛周围的边界框用黄色绘制。