ofxOpenCvでカラー映像とグレースケール映像を表示。色々やって目指せ笑顔検知。


しばらくofxOpenCvをいじり倒して笑顔検知まで作りたいと思っています。
まずハローワールド的に、
パソコンカメラのカラー映像と、グレースケール映像を表示させます。
これ

プロジェクトジェネレーターでofxOpenCvを追加するのをわすれずに!

実装方法

// カメラ使いますよ
ofVideoGrabber
// カメラから入った1フレーム分のカラー画像 インスタンス
ofxCvColorImage
// カメラから入った1フレーム分のグレースケールの画像 インスタンス
ofxCvGrayscaleImage
をそれぞれ定義

ofApp.h

#pragma once

#include "ofMain.h"

/* これ追加 */
#include "ofxOpenCv.h"

class ofApp : public ofBaseApp{

    public:
        void setup();
        void update();
        void draw();

        void keyPressed(int key);
        void keyReleased(int key);
        void mouseMoved(int x, int y );
        void mouseDragged(int x, int y, int button);
        void mousePressed(int x, int y, int button);
        void mouseReleased(int x, int y, int button);
        void mouseEntered(int x, int y);
        void mouseExited(int x, int y);
        void windowResized(int w, int h);
        void dragEvent(ofDragInfo dragInfo);
        void gotMessage(ofMessage msg);

    // カメラ
    ofVideoGrabber cam;

    // カメラから入った1フレーム分のカラー画像
    ofxCvColorImage colorImg;

    // カメラから入った1フレーム分のグレースケールの画像
    ofxCvGrayscaleImage grayImg;

};

initGrabberでカメラ映像を取り込み

allocate()で処理するメモリ領域を確保

cam.update()でカメラからの映像更新

一個一個のカメラからのピクセルデータをカラーイメージに格納する
colorImg.setFromPixels(cam.getPixels().getData(), 320, 240);

ofxCvGrayscaleImageにカラーイメージデータを突っ込んで変換
grayImg = colorImg;

drawで描画

ofApp.cpp

#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){

    // カメラからの取り込み
    cam.initGrabber(320, 240);

    // カラー画像を格納する領域を確保
    colorImg.allocate(320, 240);
    // グレースケール画像を格納する領域
    grayImg.allocate(320, 240);

    /* (allocate 格納の意味) */

}

//--------------------------------------------------------------
void ofApp::update(){

    // カメラの更新
    cam.update();

    // 一個一個のピクセルデータをカラーイメージに格納する
    colorImg.setFromPixels(cam.getPixels().getData(), 320, 240);

    // グレースケールイメージにカラーデータを入れる
    grayImg = colorImg;



    /*  おまけコーナー */
    //colorImg.blur(10);   これでblurもかけれます
    /*
     colorImg.mirror(false, true); これで画像反転できます。
     void ofImage_::mirror(bool vertical, bool horizontal) 関数の仕組み
    */


}

//--------------------------------------------------------------
void ofApp::draw(){

    colorImg.draw(0,0, 320, 240);
    grayImg.draw(330,0, 320, 240);

}


次は差分と境界線か...
続く!