過去に自分の書いたコードを漁っていたら、他の人にも役に立ちそうな関数をいくつか見つけたのでGitHub上に公開しました。
どれも小ネタ程度(大ネタはコードが整理されていない)ですが、ググってきた人のお役に立てれば幸いです。
どれもOpenCVを使用しています。
ラベリング
確かcvBlobで自分がやりたいことができなかったり、ネットで拾ってきたコードが遅くて使えなかったりで、自分で自作しました。(今見てみたらcvBlobも大分アップデートされたみたいなので、現在はどうだかわかりませんが)
あと、cvBlobは二値画像に対してしか使えませんが、こちらは多値画像やCV_8UC1型以外にも使えます。
アルゴリズムはこちらで解説されているような、ラベル同士の連結情報を表に格納しておいて、あとで統合するという方法を用いているため、フィルタ処理一回分くらいの速度で動きます。
cv::Matのバイナリ保存
OpenCVのcv::Matオブジェクトに格納されたデータをファイルへ保存する場合、cv::FileStorageクラスやcv::Write()関数を使いますが、これはデータをASCIIコードで書き込むため、データサイズが大きくなると遅くなります。そこで、cv::Matをバイナリで保存/読み込みする関数を書きました。
https://github.com/takmin/BinaryCvMat
また役に立ちそうなもので、コードの整理がついたものから公開していきます。