6

OpenCVが提供するドキュメントを参考に顔認識プログラムを作成したところ、複数の顔を認識し、正常に動作しています。ドキュメントでは、顔を強調するために楕円を作成しています。私が理解していないのは、次のように計算した楕円の中心をどのように計算したかです

for( int i = 0; i < faces.size(); i++ )
{
   Point center(faces[i].x+faces[i].width*0.5,faces[i].y+faces[i].height*0.5);
   //more code follows drawing the ellipse

彼らが使用している顔ベクトルは次のように生成されます

face_cascade.detectMultiScale(frame_gray,faces,1.1,2,0|CV_HAAR_SCALE_IMAGE,cv::Size(30,30))

ドキュメント、つまりプログラムはリンクで提供されます

http://docs.opencv.org/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html

楕円の中心を計算する方法を知りたいのですが、円ではなく長方形を描きたい場合は、どうすればよいですか?

4

2 に答える 2

13

検出された顔は、顔を囲む長方形のセットとして返されます。ドキュメントが言うように、出力はVector of rectangles where each rectangle contains the detected object.

したがって、1 つの長方形は で構成され[ initial x, initial y, width, height ]ます。したがって、その中心を で見つけることができます( x + width*0.5 , y + height*0.5 )。この中心は楕円でも同じです。

長方形を描きたい場合は、rectangle関数を使用してください。ドキュメントを参照してください。

関数の引数は次のとおりです。

pt1 = ( x , y )

pt2 = ( x + width , y + height )

線画の楕円を次の線に変更します。

rectangle(frame,Point (faces[i].x,faces[i].y),Point (faces[i].x+faces[i].width, faces[i].y+faces[i].height),Scalar(255,0,255),4,8,0);

次のような結果が得られます。

ここに画像の説明を入力

于 2012-07-06T05:09:10.123 に答える
4

ちなみに、OpenCV2.4.2には顔認識機能が含まれています。顔検出(cv :: CascadeClassifierを使用)と顔認識(cv :: FaceRecognizerを使用)を組み合わせるためのチュートリアルと完全なソースコードサンプルを次に示します。

あなたが顔認識を求めたので。また、顔検出の方法も示しているので、興味深いかもしれません。

于 2012-07-06T15:20:25.060 に答える