检测面部何时在opencv中进入ROI

时间:2012-12-20 06:02:17

标签: c++ opencv roi

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

E.g

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

1 个答案:

答案 0 :(得分:4)

所以你有一个包围你脸的矩形和一个定义图像ROI的矩形。要检查面部是否进入ROI,您只需检查两个面是否相交。最简单的方法是使用重载运算符&这里描述的cv :: Rect_(http://docs.opencv.org/modules/core/doc/basic_structures.html#rect),然后检查结果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
}