MessagePack for C# でMessagePack旧仕様のbyte[]に対応させる

久しぶりの投稿です。 C#におけるMessagePackライブラリの中で、高速であるとされる MessagePack-CSharp。 github.com 高速で洗練されているものの、率直に申しますと、MessagePackの古い仕様のサポートが不十分で面倒なようです。その克服の方法です。 ちな…

OpenCVのLogger

OpenCVに、なんとログ出力用のクラスがあります。しかもflannの中にです。伏兵過ぎますね。 ごく簡素な実装なのですが、紹介します。

島の海岸線の長さを推定してみる

この記事はOpenCV Advent Calendar 2015の23日目の記事です。 qiita.com あらかじめ言います。しょぼいです。すみません! 目次 ネタ 手法 海領域の抽出 輪郭抽出 真ん中の輪郭のみを残す 輪郭の長さを求める 輪郭の長さをkmに変換する 北海道の海岸線長 敗…

オンメモリのFileStorage

この記事はOpenCV Advent Calendar 2015の11日目の記事です。 qiita.com 目次 筆者の環境 やりたいこと オンメモリの意義 リファレンス ファイルの場合 ファイルからcv::Algorithmを読み込み ファイルにcv::Algorithmを保存 オンメモリのFileStorage メモリ…

MatAllocatorとGC

この記事はOpenCV Advent Calendar 2015の9日目の記事です。初めてこういうのに参加します。 qiita.com 目次 筆者の環境 ネタ概要 C++/CLIによるラッパークラス メモリ不足になるシーン メモリ使用量を見てみる MatAllocatorを自作する MatAllocatorについて…

OpenCVにおける行列の"掛け算"

OpenCVの行列における演算子 * の意味が、C++とPythonで異なるようですね。はまりそうです。PythonはOpenCVというかnumpyの仕様になりますが。

GZip(Deflate)Streamで圧縮するときはCloseを忘れなく

C#

狭いスコープでusingしておくのは大事だなと再認識。 書いたコード byte[] original = File.ReadAllBytes(@"C:\Windows\explorer.exe"); var memory = new System.IO.MemoryStream(); var gzip = new System.IO.Compression.GZipStream( memory, System.IO.C…

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

ラベリング3度目です。好きですね。露骨に作者の需要が現れています。 OpenCV3.0では、cv::connectedComponents という待望のラベリング(連結成分の抽出)関数が追加されました。 ・OpenCV: Structural Analysis and Shape Descriptors ・New functionality i…

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

またまただいぶ間隔が空いてしまいすみません・・・ 前回の記事(http://schima.hatenablog.com/entry/2014/09/08/220420)で罵詈雑言を浴びせたOpenCV3.0にOpenCvSharpをひとまず対応させました。 NuGet Gallery | OpenCvSharp3 3.0.0.20150823 Release 3.0…

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

OpenCvSharpを3.0alphaに対応させる取り組みを始めました。なりふり構わず書き換え、まずはエラーが止まった段階のがこれです。Release 3.0alpha (08 Sep., 2014) · shimat/opencvsharp · GitHub2.0のときもひどい目にあいましたが、今回も何度くじけそうに…

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

別のプログラムを"ライブラリ"として参照できると、プログラミングは楽です。しかし何らかの理由でそうできず、別の実行ファイルとして呼び出す場合があります。そうするとすぐ直面するのが情報のやりとりをどうするかです。今回は、VirtualAllocExで作った…

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

知らなかった・・・ C++ (cv::VideoCapture) cv::VideCaptureにて、Cのprintfの要領でこのようにファイル名を指定すると、連番の画像ファイルを動画ストリームとして扱えます。以下の例では、001.png, 002.png, 003.png ... を順次1フレームとして読み込んで…

System.Windows.Forms.WebBrowser あれこれ備忘録

XcodeでiOS向けOpenCV

わたくし、ゆるやかなアンチマカーで、よってど素人なんですが、かの孫子でも「彼を知り己を知れば百戦殆うからず」と申します。それに携帯端末周りは以前から興味があり、知識を広げるのは悪くないと思いました。色々あって会社からMacBookを買ってもらって…

OpenCvSharpをつかう その22 (Dependency Walker)

NuGetでかなり状況は好転したとは思いますが、少し前まででは OpenCvSharpを使おうと思った人の9割はP/Invokeエラーでつまづき、そのうち7割は脱落 という状態だった、きっとそう思います。これの(Windowsにおける)特効薬がDependency Walkerです。私はこれ…

OpenCV GPUモジュールを試す

せっかくグラボがあるのに腐っていたので、有益なことに使ってみます。OpenCVのcv::gpu名前空間以下にあるGPUモジュールを使い、CUDAの力を確認します。OpenCV 2.4.8です。

OpenCvSharpをつかう その21(C++ API 概要)

OpenCvSharpはもともとC言語のOpenCV 1.0 APIを対象に作っておりました。以来6年経ち、C++ APIが充実し主流になってきたため、そのサポートを進めています。ある程度は仕様が固まってきたので、使い方をご紹介していこうと思います。今回は大まかな概観です…

OpenCVで時間の計測

cv::TickMeter を使いましょう。なんか影の薄いcontribにあります。 cv::TickMeter meter; meter.start(); // 何かの処理 meter.stop(); std::cout << meter.getTimeMilli() << "ms" << std::endl; 定番は以下のような書き方ですが、卒業しましょう。OpenCV…

JavaScriptのコンピュータビジョンライブラリ「jsfeat」を試す

jsfeatは純粋にJavaScriptのみで動作するコンピュータビジョンのライブラリです。以下がプロジェクトのサイトです。いわゆる基本的な画像処理、線形代数、特徴点抽出などなど色々とサポートしており、期待のプロジェクトです。 http://inspirit.github.io/js…

OpenCV(2.4.8)による新しいノイズ除去 ざっくり精度調べ

最近のOpenCVには、以下のような新しいフィルタ処理の関数が追加されています。 cv::fastNlMeansDenoising (photo) cv::adaptiveBilateralFilter (imgproc) この関数がどれくらい使えるものなのか、サクッと試してみました。あまり学術的に正確でないかもし…

OpenCvSharpをつかう 記事一覧

おかげさまで好評いただいている(?)このシリーズ、かなり記事が増えてきました。 各記事にリンクを羅列するとすごく長くなってきたので、記事一覧ページを作っておきます。 その1 準備 その2 画像の読み込み その3 グレースケールに変換 その4 フィルタリ…

OpenCvSharpをつかう その20(ASP.NET MVCで使う Ajax編)

その19 に少し手を加え、Ajaxによりページ遷移なしに結果画像を表示できるようにしてみます。完成形はこちらに置いてみました。自由に動かしてみてください。 http://notiz.flnet.org/CannyWebApp今回は全部がASP.NET MVCの話で、OpenCvSharpの新しい話はあ…

OpenCV C++/IFでボロノイ図・ドロネー図を描く

ボロノイ図・ドロネー図の作成については、大昔からOpenCV C/IFに有りました。C++には無いと思っていたのですが、少し前にいつの間にか有ることを知りました。Cのボロノイ図まわりのAPIは、正直いまだにあまり理解していません。いまひとつ、つかみどころが…

OpenCvSharpをつかう その19(ASP.NET MVCで使う 入門編)

OpenCVをC++ではなくC#(.NET Framework)からわざわざ利用する最大のメリットは何か。単純に言語・開発環境的な理由(書きやすいとか)を挙げる人も多いでしょうが、おそらく本質的に最も大きいのは、.NET Frameworkが持つ膨大なクラスライブラリ・周辺技術等…

OpenCvSharpをつかう その18(ラベリング・改)

この度、ラベリング機能を提供するOpenCvSharp.Blobを、P/Invokeによる実装をやめ、すべてC#(マネージドコード)で実装しなおしました。これは以下の理由からです。 ●特にCvBlobインスタンスの取り回しが悪い。リスト側のCvBlobsが解放されるとCvBlobも解放さ…

OpenCvSharpをつかう その17(NuGetで導入)

前々からの野望だったNuGetパッケージを、このたび公開しました! その1で紹介した方法よりもずっと簡単に使い始めることができるはずです。OpenCVの事前インストールも不要です。まだ作りたてほやほやなので変更されるかもしれませんが、ひとまずの使い方紹…

ImageProcessor を使う

C#

NuGetパッケージに ImageProcessor というライブラリがあります。名前は大仰なのに機能は少ないものの、純粋なC#実装で(GDI+)、簡単にちょっとした画像処理ができるので、使う場面によっては有用だと感じました。以下、ImageProcessor(1.7.1.1)の使い方の紹…

TortoiseGitをGithubの二段階認証に対応

Githubのログインを二段階認証(Two-factor Authentication)に変更したところ、TortoiseGitからpullなどをしようとすると「Authentication failed」するようになってしまいました。これを克服する手順です。

Google APIからGoogle Fusion Tablesに触る

Google Fusion Tablesは、簡単に言うとオンラインで使えるデータベースです。これ、相当すごいと思います。夢広がりまくりです。SQLっぽいクエリを投げて、データを取得したり、追加したりなどなどできます。特にGoogle Mapsとの連携が良くできていますが、…

OpenCvSharpをつかう その16(SVM)

前回の記事に引き続き、SVMです。今回はOpenCvSharpからOpenCVのopencv2/ml.hpp(実装当時はopencv/ml.h)にある機械学習を使います。OpenCvSharpをつかう 記事一覧