OpenCvSharpをつかう その24 (OpenCV 3.0のラベリング)

ラベリング3度目です。好きですね。露骨に作者の需要が現れています。

OpenCV3.0では、cv::connectedComponents という待望のラベリング(連結成分の抽出)関数が追加されました。

この関数を3.0.0.20150819版以降のラッパーでサポートしましたので、それを紹介します。

好みかもしれませんが、素のcv::connectedComponentsは、あまり使いやすい設計とは思えません。そこで、昔から添付しているOpenCvSharp.Blobに使い勝手を近づけたラッパーも作成しました。それも紹介します。

OpenCvSharpをつかう 記事一覧

続きを読む

OpenCvSharpをつかう その23 (OpenCV 3.0対応)

またまただいぶ間隔が空いてしまいすみません・・・

前回の記事(http://schima.hatenablog.com/entry/2014/09/08/220420)で罵詈雑言を浴びせたOpenCV3.0にOpenCvSharpをひとまず対応させました。

以下、簡潔に変更点・注意点を示していきます。

OpenCvSharpをつかう 記事一覧

続きを読む

OpenCV3.0alpha 変更点レビュー ~ラッパー開発者の視点から~

OpenCvSharpを3.0alphaに対応させる取り組みを始めました。なりふり構わず書き換え、まずはエラーが止まった段階のがこれです。

Release 3.0alpha (08 Sep., 2014) · shimat/opencvsharp · GitHub

2.0のときもひどい目にあいましたが、今回も何度くじけそうになったことやら。いや、現在進行形でくじけていますが。この道中で気づいたことを雑多に書き残します。新しいコンピュータビジョンのアルゴリズムがどうしたこうした、という話は一切ありません。それどころじゃない...

以下だいたいネガティブなので、あらかじめ弁明しておきますが、C++から触る分にはよくできたAPIになってきています。ラッパーのことなど考える必要はありません、このまま突き進んでいってください。

続きを読む

他プロセスとのメモリのやり取り

別のプログラムを"ライブラリ"として参照できると、プログラミングは楽です。しかし何らかの理由でそうできず、別の実行ファイルとして呼び出す場合があります。

そうするとすぐ直面するのが情報のやりとりをどうするかです。今回は、VirtualAllocExで作ったメモリ領域を通して実現する方法の備忘録です。

続きを読む

連番の画像ファイルを動画として扱う

知らなかった・・・

C++ (cv::VideoCapture)

cv::VideCaptureにて、Cのprintfの要領でこのようにファイル名を指定すると、連番の画像ファイルを動画ストリームとして扱えます。

以下の例では、001.png, 002.png, 003.png ... を順次1フレームとして読み込んでくれます。

cv::VideoCapture capture("%03d.png");

C (CvCapture)

C APIでも同様にできます (いつのバージョンから可能だったのかはわかりません)。

auto capture = cvCreateFileCapture("%03d.png");

使いどころ

複数枚画像が必要な処理で、かつ手持ちが静止画、というケースはそこそこ多いはずです。そんな時に手間取らずすぐに処理が行えます。

例えば、OpenCV超解像(cv::superres)は複数枚の画像を要します。入力を指定するインターフェースはVideoCaptureそっくりで、(GPUを無視すると)内部実装でもVideoCaptureが使われています。そこで、このようにすると連番静止画ファイルがそのまま使えそうです。

auto frameSource = cv::superres::createFrameSource_Video("%03d.png");

auto sr = cv::superres::createSuperResolution_BTVL1();
sr->setInput(frameSource);