別のプログラムを"ライブラリ"として参照できると、プログラミングは楽です。しかし何らかの理由でそうできず、別の実行ファイルとして呼び出す場合があります。
そうするとすぐ直面するのが情報のやりとりをどうするかです。今回は、VirtualAllocExで作ったメモリ領域を通して実現する方法の備忘録です。
続きを読む別のプログラムを"ライブラリ"として参照できると、プログラミングは楽です。しかし何らかの理由でそうできず、別の実行ファイルとして呼び出す場合があります。
そうするとすぐ直面するのが情報のやりとりをどうするかです。今回は、VirtualAllocExで作ったメモリ領域を通して実現する方法の備忘録です。
続きを読む知らなかった・・・
cv::VideCaptureにて、Cのprintfの要領でこのようにファイル名を指定すると、連番の画像ファイルを動画ストリームとして扱えます。
以下の例では、001.png, 002.png, 003.png ... を順次1フレームとして読み込んでくれます。
cv::VideoCapture capture("%03d.png");
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);
NuGetでかなり状況は好転したとは思いますが、少し前まででは
OpenCvSharpを使おうと思った人の9割はP/Invokeエラーでつまづき、そのうち7割は脱落
という状態だった、きっとそう思います。
これの(Windowsにおける)特効薬がDependency Walkerです。私はこれがWindowsにおけるもっとも有用なフリーソフトと信じています。
TypeInitializationException等、よくわからない例外でこけたら、以下をお試しください。
続きを読む