カメラからビデオを読み取り、人の顔の周りに長方形を描く顔追跡プログラムがあります。私がやりたいことは、顔がフレームの特定の領域に入ったときにプログラムに認識させ、他のアクションを初期化することです。これを行うにはどのようなコマンドが必要ですか? (私は C++ と openCV 2.4.3 を使用しています)
例えば
detect face;
if (face is in ROI)
{
close video feed;
}
したがって、顔を囲む四角形と、画像の ROI を定義する四角形があります。顔が ROI に入るかどうかを確認するには、2 つの四角形が交差するかどうかを確認するだけです。これを行う最も簡単な方法は、ここ ( http://docs.opencv.org/modules/core/doc/basic_structures.html#rect ) で説明されているように、cv::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
}