如何使用OpenCV Python在图像中检测眼睛?

如何使用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()

考虑以下图像为 输入文件 该程序-

如何使用OpenCV Python在图像中检测眼睛?

当您运行上面的Python程序时,它将生成以下输出窗口−

Number of detected faces: 1

我们得到以下输出窗口,显示图像中检测到的眼睛 –

如何使用OpenCV Python在图像中检测眼睛?

检测到的眼睛周围的边界框用黄色绘制。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV