not good but great

プログラミング、アート、映画・本の感想について書きます。

openFrameworksでWebカメラの映像を取得する

Webcamの映像を取得する

demo

f:id:naoyashiga:20140402215135j:plain
スケッチブックをカメラに映してみました。
・参考
http://openframeworks.cc/documentation/video/ofVideoGrabber.html

code

一部のコードを抜粋して、掲載します。

class testApp : public ofBaseApp{
    public:
        void setup();
        void update();
        void draw();
        void windowResized(int w, int h);
    
        ofVideoGrabber my_grabber;
};

Webcamの映像を取得するクラスofVideoGrabberが用意されているので、インスタンスを生成します。

//--------------------------------------------------------------
void testApp::setup(){
    //背景色
    ofBackground(0, 0, 0);
    //フレームレート
    ofSetFrameRate(30);
    ofSetWindowTitle("video test");
    
    my_grabber.initGrabber(ofGetWidth(), ofGetHeight());
    my_grabber.setDeviceID(1);
    
}

//--------------------------------------------------------------
void testApp::update(){
    my_grabber.update();
}

//--------------------------------------------------------------
void testApp::draw(){
    my_grabber.draw(0, 0);
}

initGrabberにサイズを指定します。drawで左上隅の位置を決めています。updateで繰り返し取得するビデオの画像を更新しています。

リサイズできない

void testApp::windowResized(int w, int h){
    my_grabber.width = ofGetWidth();
    my_grabber.height = ofGetHeight();
}

素直に横と縦をウィンドウサイズにしてみましたが、うまくいきませんでした。width,heightの値はちゃんと変わっているのですが、それがビデオのサイズにはなっていないようです。

void testApp::windowResized(int w, int h){
    my_grabber.width = w;
    my_grabber.height = h;
}

同じですが、これでも変化なしでした。

void testApp::windowResized(int w, int h){
    my_grabber.close();
    my_grabber.initGrabber(ofGetWidth(), ofGetHeight());
    my_grabber.setDeviceID(1);
}

一回ビデオを閉じて再設定してみました。

[ofQTKitGrabber:error] Selected video device ID (1) out of range (1).
[warning] call setDeviceID before grabber is started!

こんなエラーが出ました。setDeviceIDはすでにスタートしてるということでしょうか。これを2に変えても無理でした。

わからないので諦めました。