将 OpenCV 的 Rect 转换为 dlib 的矩形?

新手上路,请多包涵

由于速度慢,我使用 OpenCV 的人脸检测器和 C++ 进行 dlib 的人脸对齐,而不是 dlib 的检测器。

要使用 dlib 的人脸对齐,我必须将检测矩形传递给人脸对齐函数。

但是,即使 dlib 的检测器没问题,我也不能这样做。

因为 dlib 的示例代码 中使用了 std::vector<rectangle> dets ,所以我尝试如下分配,但我不能。

请注意, detect_rect 是 OpenCV 检测器的人脸检测矩形。

 dets[0].l = detect_rect.left;
dets[0].t = detect_rect.top;
dets[0].r = detect_rect.right;
dets[0].b = detect_rect.bottom;

你能告诉我任何建议吗?

谢谢你。

原文由 univ_student 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 474
1 个回答

需要注意的是,OpenCV 使用以下定义:

OpenCV 通常假定矩形的上边界 和左边界 包含在内,而 右边界和下边界不 包含在内。

dlib 的定义包括所有边界,因此转换函数必须注意将右下角移动 1。

这是我的 Utils.h 中的一个函数

static cv::Rect dlibRectangleToOpenCV(dlib::rectangle r)
{
  return cv::Rect(cv::Point2i(r.left(), r.top()), cv::Point2i(r.right() + 1, r.bottom() + 1));
}

反之亦然:

 static dlib::rectangle openCVRectToDlib(cv::Rect r)
{
  return dlib::rectangle((long)r.tl().x, (long)r.tl().y, (long)r.br().x - 1, (long)r.br().y - 1);
}

原文由 lahjaton_j 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题