opencv - 从图像中裁剪脸部

标签 opencv machine-learning computer-vision deep-learning face-detection

我有一组脸部图像,每张图像中有 1 个或有时 2 个脸部。我想做的是找到每张图像中的脸部,然后裁剪它。 我测试了几种方法,这些方法是使用 openCV 在 python 中实现的,但结果不太好。这些方法是:

1- Implementation 1

2- Implementation 2

我还测试了另一种模型,但我不允许发布两个以上的链接。 问题在于,这些基于 Haar 特征的算法对于面部尺寸并不鲁棒,当我在靠近面部拍摄的图像上尝试它们时,它们找不到任何面部。 有人提到尝试基于深度学习的算法,但我找不到与我想做的事情相对应的算法。基本上,我想我需要一个预先训练的模型,它可以为我提供图像中面部边界框的坐标,或者更好的是,一个预先训练的模型,它可以给出裁剪后的面部图像作为输出。

最佳答案

你不需要机器学习算法,图算法就足够了。例如Snapchat人脸识别算法的工作原理如下:

  1. 使用最常见面(“标准面”)的节点和边创建图形。

  2. 使图形变形/将节点重新坐标到输入图像中的拟合像素

  3. 瞧,您在输入图像中识别出了人脸。

说起来容易,但编码起来却很难。例如,我们在我们的大学实现了 Dijkstra 算法,如果您需要的话,我可以向您提供我的“图形”类(class)。但我是用 C++ 编写的。

使用这些图形算法,您可以更有效地裁剪脸部。

关于opencv - 从图像中裁剪脸部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46418297/

相关文章:

c++ - OpenCV CV_* 函数错误

machine-learning - 特征金字塔网络感受野

python - 从特征匹配估计基本矩阵或基本矩阵

java - 将MatOfInt转换为MatofPoint

Python Predict_proba 类识别

ios - 使用 solvePnP() 和 SOLVEPNP_IPPE_SQUARE 方法估计相机姿态

python - Tensorflow:使用神经网络对正面或负面短语进行分类

machine-learning - Theano 梯度不适用于 .sum(),仅适用于 .mean()?

c++ - OpenCV 错误:断言失败 ((unsigned)i0 < (unsigned)size.p[0]) in cv::Mat::at

c++ - opencv 重新映射到不同大小的图像