かなり前に顔検出もやっていたので載せときます。
oF 0061で作ったときはかなり面倒だったけど、0070以降だとofxCvHaarFinderが使えるから
こんな感じにかなり楽にできます。
コードも載せておきます。
#define MOVIE_INPUT_WSIZE 320 #define MOVIE_INPUT_HSIZE 240 void testApp::setup(){ // ビデオを取り込み初期化 vidGrabber.initGrabber(MOVIE_INPUT_WSIZE, MOVIE_INPUT_HSIZE); // カラー画像とグレー画像の画像領域を確保 colorImg.allocate(MOVIE_INPUT_WSIZE, MOVIE_INPUT_HSIZE); grayImage.allocate(MOVIE_INPUT_WSIZE, MOVIE_INPUT_HSIZE); // 検分器の読み込み haarFinder.setup("haarcascade_frontalface_alt2.xml"); } void testApp::update(){ bool bNewFrame = false; vidGrabber.grabFrame(); bNewFrame = vidGrabber.isFrameNew(); if (bNewFrame){ // 取得した画像を解析するカラー画像の領域に格納 colorImg.setFromPixels(vidGrabber.getPixels(), MOVIE_INPUT_WSIZE, MOVIE_INPUT_HSIZE); // カラー画像をグレースケールに変換 grayImage = colorImg; // グレースケールオブジェクトを設定 haarFinder.findHaarObjects(grayImage, 10, 10); } } void testApp::draw(){ // 検出した顔の数を取得 int numFace = haarFinder.blobs.size(); float x[numFace], y[numFace], w[numFace], h[numFace]; ofSetColor(0xffffff); // 通常の画像と顔を検出した画像の出力 colorImg.draw(0, 0, MOVIE_INPUT_WSIZE, MOVIE_INPUT_HSIZE); colorImg.draw(MOVIE_INPUT_WSIZE, 0, MOVIE_INPUT_WSIZE, MOVIE_INPUT_HSIZE); //****************************** // Face //****************************** for(int i = 0; i < numFace; i++){ x[i] = haarFinder.blobs[i].boundingRect.x; y[i] = haarFinder.blobs[i].boundingRect.y; w[i] = haarFinder.blobs[i].boundingRect.width; h[i] = haarFinder.blobs[i].boundingRect.height; // 検出した顔を白の四角で覆う ofSetColor(0xFFFFFF); ofRect(x[i]+MOVIE_INPUT_WSIZE, y[i], w[i], h[i]); } }
おすすめ書籍