如何使用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在输入图像中检测眼睛。
考虑以下图像为 输入文件 该程序-
当您运行上面的Python程序时,它将生成以下输出窗口−
我们得到以下输出窗口,显示图像中检测到的眼睛 –
检测到的眼睛周围的边界框用黄色绘制。