takminの書きっぱなし備忘録 @はてなブログ

主にコンピュータビジョンなど技術について、たまに自分自身のことや思いついたことなど

ラベリング、モーフィング、cv::Matのバイナリ保存

過去に自分の書いたコードを漁っていたら、他の人にも役に立ちそうな関数をいくつか見つけたのでGitHub上に公開しました。

どれも小ネタ程度(大ネタはコードが整理されていない)ですが、ググってきた人のお役に立てれば幸いです。
どれもOpenCVを使用しています。

ラベリング

確かcvBlobで自分がやりたいことができなかったり、ネットで拾ってきたコードが遅くて使えなかったりで、自分で自作しました。(今見てみたらcvBlobも大分アップデートされたみたいなので、現在はどうだかわかりませんが)
あと、cvBlobは二値画像に対してしか使えませんが、こちらは多値画像やCV_8UC1型以外にも使えます。
アルゴリズムこちらで解説されているような、ラベル同士の連結情報を表に格納しておいて、あとで統合するという方法を用いているため、フィルタ処理一回分くらいの速度で動きます。

http://github.com/takmin/ConnectedComponentAnalysis

モーフィング

2枚の画像とその対応点を入力したら、その中間画像を生成してくれます。

入力画像1


入力画像2


モーフィング(2枚の画像の中間)


モーフィング(1枚目の画像の形状に2枚目のテクスチャを貼り付け)



https://github.com/takmin/ImageMorphing

cv::Matのバイナリ保存

OpenCVのcv::Matオブジェクトに格納されたデータをファイルへ保存する場合、cv::FileStorageクラスやcv::Write()関数を使いますが、これはデータをASCIIコードで書き込むため、データサイズが大きくなると遅くなります。そこで、cv::Matをバイナリで保存/読み込みする関数を書きました。


https://github.com/takmin/BinaryCvMat


また役に立ちそうなもので、コードの整理がついたものから公開していきます。