首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenCV,dlib地标旋转

OpenCV,dlib地标旋转
EN

Stack Overflow用户
提问于 2017-07-24 19:32:50
回答 2查看 1.8K关注 0票数 2

我是OpenCV和dlib的新手,我不确定我的设计是否正确。我想写安卓手机的C++人脸检测器,它应该可以检测不同手机方向和旋转角度的人脸。当手机方向是纵向和横向时,让我们留下来。我使用OpenCV来旋转/编辑图像,使用dlib来检测人脸。dlib形状预测是用shape_predictor_68_face_landmarks.dat初始化的,它只能在正确的手机方向上检测人脸(这意味着如果我将手机旋转90度,它就不能检测人脸)。为了能够检测人脸,我从加速计中读取轴并旋转源图像以校正方向,然后将其发送到dlib人脸检测器,它检测到ok,但输出的dlib::full_object_detection形状的坐标当然与旋转的图片匹配,但不是原始的。因此,这意味着我必须转换(旋转地标)回到原始图像。

dlib或OpenCV中是否有任何现有的API可以实现指定角度的旋转地标(dlib::full_object_detection)?如果你能提供一些例子,那就更好了。

EN

回答 2

Stack Overflow用户

发布于 2017-07-25 09:15:23

对于iPhone应用程序,使用iPhone摄像头捕获的图像中的EXIF数据可以首先用于旋转图像。但我不能保证Android手机能做到这一点。

在大多数实际情况下,当原始图像中的人脸检测没有返回任何结果(或者返回非常小的人脸等奇怪的结果)时,旋转图像和执行人脸检测会更容易。我已经在几个Android应用程序中看到了这一点,并在几个项目中使用了myseklf。

票数 0
EN

Stack Overflow用户

发布于 2018-11-05 16:12:46

据我所知,您希望将检测到的地标旋转到原始图像的坐标系中。如果是这样,您可以使用getRotationMatrix2D和transform来旋转点列表。

例如:您的图像围绕中心点(图像的中点)向右旋转了90度,现在您需要将地标点围绕中心点旋转-90度。代码是

代码语言:javascript
运行
复制
// 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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45279535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档