我是OpenCV和dlib的新手,我不确定我的设计是否正确。我想为Android手机写一个C++人脸检测器,它应该检测不同手机方向和旋转Angular 的人脸。让我们留在手机方向是纵向和横向。我使用OpenCV来旋转/编辑图像,并使用dlib来检测人脸。dlib形状 predicate 初始化为shape_predictor_68_face_landmarks.dat,它只能在正确的手机方向上检测人脸(这意味着如果我将手机旋转90度,它就无法检测人脸)。
为了能够检测人脸,我从加速度计读取轴并旋转源图像以纠正方向,然后将其发送到dlib人脸检测器,它检测到OK,但dlib::full_object_detection形状中的输出坐标当然与旋转的图片匹配,但不是原始的。因此,这意味着我必须转换(旋转地标)以返回原始图像。
在dlib或OpenCV中是否有任何现有的API可以使指定Angular 的旋转标志(dlib::full_object_detection)成为可能?如果你能提供一些例子就好了。
2条答案
按热度按时间sauutmhj1#
对于iPhone应用程序,使用iPhone相机捕获的图像中的EXIF数据可用于首先旋转图像。但我不能保证这对于Android手机。
在大多数实际情况下,当原始图像中的人脸检测不返回任何结果(或返回奇怪的结果,如非常小的人脸)时,更容易旋转图像并执行人脸检测。我已经在几个Android应用程序中看到了这一点,并在几个项目中使用了它。
xdnvmnnf2#
据我所知,您希望将检测到的地标旋转到原始图像的坐标系。如果是这样,您可以使用 * getRotationMatrix 2D * 和 transform 来旋转点列表。
举例来说:* 您的图像围绕中心点(图像的中间点)向右旋转90度,现在您需要围绕中心点将标志点旋转回-90度。验证码 *
字符串