カスケード分類器のターゲット

カスケード分類器の
目標
チュートリアルのこのセクションでは、あなたが学びます。

使用CascadeClassifierクラスオブジェクトは、我々が機能を使用します。具体的にビデオストリーム内で検出された:
それはハール特徴はLBPの機能分類器もありかもしれ.xmlファイルの分類子をロードするためにロードを...
DetectMultiScaleにマルチ画像スケールのテスト。
の原則
のコード
を以下に示し、このチュートリアルのコードでは。あなたもここでのポイントをダウンロードすることができます。第二版(顔検出を使用してLBP)がここで見つけることができます。

#include「opencv2 / objdetect / objdetect.hpp」
の#include「opencv2 /のHighGUI / highgui.hpp」
の#include「opencv2 / imgproc / imgproc.hpp」

書式#include
する#include <stdio.hに>

名前空間stdを使用。
名前空間の品種を使用しました。

/ **関数宣言* /
無効detectAndDisplay(マットフレーム);

/ **全局变量* /
文字列face_cascade_name =「haarcascade_frontalface_alt.xml」。
文字列eyes_cascade_name =「haarcascade_eye_tree_eyeglasses.xml」。
CascadeClassifier face_cascade;
CascadeClassifierのeyes_cascade。
文字列window_nameが=「キャプチャ-顔検出」。
RNGのRNG(12345)。

/ **主な機能@ /
INTメイン(INTのargc、char型のconst
* ARGV)
{
CvCapture *キャプチャ、
マットフレーム。

// - 1.ロードカスケード分類器のファイル
IF(face_cascade.load(face_cascade_name)!){のprintf( " - ()の読み込みエラー\ N-!");戻り-1;};
IF(eyes_cascade.load(! eyes_cascade_name)){のprintf( " - ()の読み込みエラー\ N!");戻り-1;};

// -オープン内蔵カメラのビデオストリーム
をキャプチャcvCaptureFromCAM =(-1);
IF(キャプチャ)
{
ながら(真の)
{
フレーム= cvQueryFrame(キャプチャ)。

// -前記現在のフレームを分類器を用いて検出される
(frame.empty()!)IF
{DetectAndDisplay(フレーム);}
そうでは
{のprintf( " - ()は撮像されたフレーム-ブレイク!!"); BREAK ;}

   int c = waitKey(10);
   if( (char)c == 'c' ) { break; }
  }

}
0を返します。
}

/ ** @函数detectAndDisplay * /
無効detectAndDisplay(マットフレーム)
{
のstd ::ベクトル 顔;
マットframe_gray。

cvtColor(フレーム、frame_gray、CV_BGR2GRAY)。
equalizeHist(frame_gray、frame_gray)。

// -マルチサイズの顔検出
face_cascade.detectMultiScale(frame_gray、顔、1.1、 2、0 | CV_HAAR_SCALE_IMAGE、サイズ(30、30))。

以下のために(; I <faces.size(); INT iが0 = I ++)
{
ポイントセンター(面[I]・X +顔[i]は.width 0.5、顔[i]は.Y +顔[i]は.height 0.5 );
楕円(フレーム、中心、サイズ(顔[i]が.width 0.5、顔[i]は.height 0.5)、0、0、360、スカラー(255、0、255)、4、8、0);

Mat faceROI = frame_gray( faces[i] );
std::vector<Rect> eyes;

//-- 在每张人脸上检测双眼
eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );

for( int j = 0; j < eyes.size(); j++ )
 {
   Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5 );
   int radius = cvRound( (eyes[j].width + eyes[i].height)*0.25 );
   circle( frame, center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
 }

}
// -ショー画像の結果
関数imshow(window_nameが、フレーム);
}
コードの説明の
結果
、図上記のコードを使用して内蔵ビデオストリームのカメラ画像の顔検出の結果です。

... / ... / ... / ... / _images / Cascade_Classifier_Tutorial_Result_Haar.jpg
注意機密ファイルがhaarcascade_frontalface_alt.xmlコピーして現在のディレクトリを低くするhaarcascade_eye_tree_eyeglasses.xml。彼らOpenCVのインストールフォルダのOpenCVの/データ/内部haarcascades。

まだちょうど中古分類器を使用して両眼の検出のための検出結果を文書分類器lbpcascade_frontalface.xml(LBP機能訓練された)を使用して図。

... / ... / ... / ... / _images / Cascade_Classifier_Tutorial_Result_LBP.jpg
翻訳¶

リリース元の2件の記事 ウォンの賞賛0 ビュー30

おすすめ

転載: blog.csdn.net/xyzyjg/article/details/104423785