久しぶりのoFで、ビデオをリサイズしてピクセルデータを取得するのに、ofImageでリサイズしたらとても遅く、使い物になりませんでした。
Higa(http://qiita.com/satoruhiga) さんから教えてもらった方法を忘れないようにメモします。
ざっくりとコードは以下の様な感じです。
###ダメな例(ぼくがやっていた。)
ofApp.cpp
ofVideoGrabber video;
ofImage img;
void setup()
{
ofSetFrameRate(60);
ofSetVerticalSync(true);
ofBackground(0);
video.initGrabber(640, 480);
}
void update()
{
video.update();
if (video.isFrameNew())
{
img.setFromPixels(video.getPixels(), video.getWidth(), video.getHeight(), OF_IMAGE_COLOR);
img.resize(320, 240);
unsinged char * pix;
pix = img.getPixels();
// do something
}
}
###高速な例(Higaさんに教えてもらった。)
ofApp.cpp
ofVideoGrabber video;
ofFbo fbo;
void setup()
{
ofSetFrameRate(60);
ofSetVerticalSync(true);
ofBackground(0);
video.initGrabber(640, 480);
fbo.allocate(320, 240, GL_RGB);
}
void update()
{
video.update();
if (video.isFrameNew())
{
fbo.begin();
video.draw(0, 0, fbo.getWidth(), fbo.getHeight());
fbo.end();
ofPixels pix;
fbo.readToPixels(pix);
// do something
}
}
おかげでfpsが20から60に変化しましたー
Higaさんにマジ感謝ですー