0

我有一个面部跟踪程序,它从相机读取视频并在人脸周围绘制一个矩形。我想要做的是让程序识别面部何时进入框架的特定区域,并初始化一些其他动作。我需要什么命令来做到这一点?(我正在使用 C++ 和 openCV 2.4.3)

例如

    detect face;
if (face is in ROI)
{
    close video feed;
}
4

1 回答 1

4

所以你有一个包围你的脸的矩形和一个定义图像 ROI 的矩形。要检查人脸是否进入 ROI,您只需检查两个矩形是否相交。最简单的方法是使用 cv::Rect_ 的重载运算符 & ,如此处所述(http://docs.opencv.org/modules/core/doc/basic_structures.html#rect),然后检查该区域是否得到的矩形是 > 0。

示例代码如下所示:

cv::Rect r1(0, 0, 10, 10);
cv::Rect r2(5, 5, 10, 10);
if ( (r1&r2).area() )
{
    // rects intersect
}

如果您希望人脸以一定的百分比进入 ROI,您可以将交叉区域与两个输入区域的最小值进行比较:

cv::Rect r1(0, 0, 10, 10);
cv::Rect r2(5, 5, 10, 10);
double minFraction( 0.1 );
if ( (r1&r2).area() > minFraction * std::min(r1.area(), r2.area() ) )
{
    // rects intersect by at least minFraction
}
于 2012-12-20T11:34:55.773 回答