Posted at

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

More than 1 year has passed since last update.

しばらく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);

}


次は差分と境界線か...

続く!