一般来说,这不是一个微不足道的问题,但一个基本的想法(我用于我的 BSc 论文)非常简单。这不是我使用的全部解决方案,但现在应该足够了,如果没有的话 - 让我知道我会写更多关于它的内容。
对于第一帧:
- 找脸(我用过
haarcascade_frontalface_default.xml
级联,但你可以尝试不同的)并记住它的位置。
- 在面部矩形内找到眼睛(使用 Haar 级联作为眼睛对 (
haarcascade_mcs_eyepair_big.xml
),而不是一只眼睛 - 这是更快、更简单的解决方案)并记住位置。
对于其他框架:
- 展开(大约 20-50%)您最近发现人脸的矩形。
- 在扩展的矩形中查找人脸。
- 在脸上找到眼睛。如果您在上一步中没有找到人脸,您可以尝试在之前眼睛位置的扩展矩形中搜索眼睛。
几个重要的事情:
- 在搜索使用
CV_HAAR_FIND_BIGGEST_OBJECT
标志时。
- 在搜索之前将帧转换为灰度 - 在搜索期间,opencv 仅使用灰度图像,因此转换整个图像一次比转换整个图像(对于第一次搜索 - 面部)和只转换包含面部的矩形(对于第二次搜索 - 眼睛)更快
- 有人说在搜索之前均衡直方图可能会改善结果,我不确定,但如果你愿意,你可以试试这个 - 使用
equalizeHist
函数。请注意,它仅适用于灰度图像。