OpenCV,dlib标志旋转

fhity93d  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(90)

我是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)成为可能?如果你能提供一些例子就好了。

sauutmhj

sauutmhj1#

对于iPhone应用程序,使用iPhone相机捕获的图像中的EXIF数据可用于首先旋转图像。但我不能保证这对于Android手机。
在大多数实际情况下,当原始图像中的人脸检测不返回任何结果(或返回奇怪的结果,如非常小的人脸)时,更容易旋转图像并执行人脸检测。我已经在几个Android应用程序中看到了这一点,并在几个项目中使用了它。

xdnvmnnf

xdnvmnnf2#

据我所知,您希望将检测到的地标旋转到原始图像的坐标系。如果是这样,您可以使用 * getRotationMatrix 2D * 和 transform 来旋转点列表。
举例来说:* 您的图像围绕中心点(图像的中间点)向右旋转90度,现在您需要围绕中心点将标志点旋转回-90度。验证码 *

// the center point 
Point2f center=(width/2,height/2)

//the angle to rotate, in radiant 
// in your case it is -90 degree
double theta_deg= angleInDegree * 180 /M_PI;

// get the matrix to rotate
Mat rotateMatrix = getRotationMatrix2D(center, theta_deg, 1.0);

// the vector to get landmark points
std::vector<cv::Point> inputLandmark;
std::vector<cv::Point> outputLandmark;

// we use the same rotate matrix and use transform
cv::transform(inputLandmark, outputLandmark, rotateMatrix);

字符串

相关问题