我有一个面部追踪程序,可以从相机中读取视频,并在人脸周围绘制一个矩形。我想要做的是让程序识别面部何时进入框架的特定区域,并初始化其他一些动作。我需要做什么命令? (我使用的是C ++和openCV 2.4.3)
E.g
detect face;
if (face is in ROI)
{
close video feed;
}
答案 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
}