hellkite 日記と雑記とメモ。

Shiki Kazamaの駄文と音楽と、時々技術な感じ

openFrameworksの相互変換(ofPixels, ofImage, ofFbo, cv::Matなど)


スポンサーリンク


画像処理関係の仕事でopenFrameworksを使ってプロトタイピングしている*1のですが、各形式の相互変換のやり方をよく忘れるのでメモ。

ofTextureとofFboは、ofPixelsを経由してofImageへ。下のコードは、ofTextureだけど、ofFboにも同じreadToPixels()がある。

ofTexture tex;		// 変換元のテクスチャ

ofPixels pixels;
tex.readToPixels(pixels);

ofImage image;
image.setFromPixels(pixels);


ofPixelsからofTextureへ。

ofPixels pix;		// 変換元のofPixels

ofTexture tex;
tex.loadData(pix);

画像処理ならよく使用するOpenCV。ofPixelsからcv::Matへの変換。ofPixelsはもちろんアロケート済みであること。データ自体はコピーされないので、高速(らしい)。
ちなみによく縦横逆にして怒られてます。

ofPixels pix;

cv::Mat mat(pix.getHeight(), pix.getWidth(), CV_8UC3, pix.getData()); 

ofImageでJPGを保存しようとしたら保存できなかったことがあったので、cv::Matを使って保存したりした。ofImageはJPGに対応しているはずだけど。。解像度が大きめだったからかな?(5800×2900前後)

openFrameworksで画像を保持する必要がある場合は、ofPixelsで持っておくのが一番良さそう。なんだかんだでofPixelsを経由するみたいなので。


■参考にしたもの■
forum.openframeworks.cc
hellkite.hatenablog.com

*1:納品されないような自社ツールの類もopenFrameworksで作ってしまいます。簡単に使える上にサードパーティのライブラリも制限なく使えるので・・・。