読者です 読者をやめる 読者になる 読者になる

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

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

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

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

OpenCvSharpをつかう 記事一覧

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

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

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

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の事前インストールも不要です。まだ作りたてほやほやなので変更されるかもしれませんが、ひとまずの使い方紹…

OpenCvSharpをつかう その16(SVM)

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

OpenCvSharpをつかう その15(適応的閾値処理)

適応的閾値処理 (Adaptive Thresholding) を使うサンプルです。始めからぶっちゃけますと cvAdaptiveThreshold を使え、という話になりますが、本記事はそれだけでは終わりません! OpenCvSharpでは、OpenCV標準では用意されていない適応的閾値処理を、こっ…

OpenCvSharpをつかう その14(Debian wheezyで動かす)

3年ぶりの「OpenCvSharpをつかう」シリーズ再開です! OpenCvSharpをLinuxで動かすことについては、大昔に断片的に書きましたが、最後まで通しで書いてみます。記憶を頼りに書いているので、本当は詰まった箇所が抜けているかもしれません。 その1 その2 そ…

OpenCvSharpをつかう その13(導入時のエラーについて)

13回目にして今更導入時の不具合とはなんとも変な話ですが、OpenCvSharpが動かないというケースを時々耳にします。はっきり聞いているわけではないのでよくわからないのですが、わかる限りの解決策を書いておきます。どうやらBadImageFormatExceptionが多い…

OpenCvSharpをつかう その12 (ラベリング)

【注意】 この記事の内容は古く、最新のOpenCvSharpでは動作しません。記録としてあえて残しますが、ラベリングについては以下の記事を参照してください。 http://schima.hatenablog.com/entry/2014/01/19/120540 その1 その2 その3 その4 その5 その6 その7…

OpenCvSharp x64版を公開

64bit版を公開しました。ずいぶんファイルが増えました。なおOpenCV1.1pre向けはそもそも1.1preがあまり64bitに対応していなさそうなので見送っています。(2.0も、まだまだという面はあります。)http://code.google.com/p/opencvsharp/downloads/list 去年か…

OpenCvSharpをつかう その11(画像のサイズ変更)

その1 その2 その3 その4 その5 その6 その7 その8 その9 その10 cvResizeを用いた拡大処理のサンプルです。詳しい解説はありません。

OpenCvSharpをつかう その10 (Star Detector)

その1 その2 その3 その4 その5 その6 その7 その8 その9 このところOpenCvSharpの使い方というよりはただのOpenCV 2.0の新機能紹介になっているこのシリーズですが、今回はStar Detector(日本語だとStar検出器?)のサンプルを作ってみたのでご紹介します。S…

OpenCvSharpをつかう その9 (MSER)

その1 その2 その3 その4 その5 その6 その7 その8 だんだんいい加減になっているこのシリーズですが、MSERのサンプルを作ってみたのでご紹介します。MSERの関数はOpenCV 2.0で追加されました。

OpenCvSharpをつかう その8 (LSH)

その1 その2 その3 その4 その5 その6 その7 突然レベルが急上昇している気がしますが、LSHのサンプルを作ってみたのでご紹介します。LSHの関数はOpenCV 2.0で追加されました。

"VideoInputSharp"をつくってみた

オープンソースプロジェクト第二弾。http://code.google.com/p/videoinputsharp/videoInputの.NET Framework向けラッパーです。videoInputというのは、DirectShowによるビデオキャプチャを容易にできる、C++向けライブラリです。Windows限定なのでラッパーは…

OpenCV2.0対応版OpenCvSharpを公開

気付いた範囲でOpenCV2.0で増えたcvの関数を追加しました。http://code.google.com/p/opencvsharp/downloads/listOpenCV2.0をインストールするとbinディレクトリには「libcv200.dll」といったDLLが置かれていますが、OpenCvSharpはこれらは読み込みに行きま…

PLAYSTATION Eye を.NET Frameworkから使う

PLAYSTATION Eye について PlayStation3用のカメラとして、「PLAYSTATION Eye」というものがあります。PLAYSTATION Eye(CEJH-15001)出版社/メーカー: ソニー・コンピュータエンタテインメント発売日: 2008/07/24メディア: Video Game購入: 4人 クリック: 110…

Twitterアカウント作成

OpenCvSharpの更新履歴というのは全然記録しておらず、コミットログだけが頼りだというひどい状況です。遅ればせながら、以下のアカウントに日々の更新を書き連ねていくことにしました。http://twitter.com/OpenCvSharpTwitterもログはあまり遡れないサービ…

OpenCvSharpをつかう その7 (WindowsFormsで動画の再生)

その1 その2 その3 その4 その5 その6 OpenCVのhighguiではなくWindowsFormsのウィンドウ上で動画を再生したいということは多いようです。OpenCvSharpに限っても、以下のページなどで試みられています。http://d.hatena.ne.jp/Guernsey/20081207/1228649067 …

cvRedirectErrorはOpenCV2.0では使えない?

先日実装したOpenCvSharpのエラーハンドリング機能ですが、早くも暗雲が立ち込めております。

cvLoadのエラーについて

OpenCV 1.1preでは、cvLoadは使う前にあらかじめcvの関数を呼んでおかないとエラーになるようです。http://www.codeproject.com/KB/cs/Intel_OpenCV.aspx?msg=2784187 http://www.openframeworks.cc/forum/viewtopic.php?f=10&t=1853よって、何かcvの関数、…

エラーハンドリングに対応

cvRedirectErrorに設定するコールバック関数を独自に設定することで、エラーの際に従来のようなメッセージボックスによるエラーメッセージの表示ではなく、.NET Frameworkの例外が投げられるようになりました。

OpenCvSharpをつかう その6 (PictureBoxIpl)

その1 その2 その3 その4 その5 ずいぶんと前回から間が空いてしまいました。今回は、フォームに張り付けてIplImageをすぐに表示できるPictureBoxIplコントロールの紹介です。即席で作ったものなのであまり作りこんでいないのですが、表示させる際にIplImage…

OpenCvSharpExternのバイナリを作る

Linux等のWindows以外の環境でOpenCvSharpのMachineLearning(機械学習)やBlob(ラベリング)を利用するためには、ネイティブで書かれたラッパー「OpenCvSharpExtern」を自力でコンパイルしなければなりません。この度、CMakeによって多少楽にできるようにしま…

はてなのCAPTCHAのクラック

今度研究室でOpenCV勉強会というのをすることになったのですが、そのネタにと思い、id:yaneurao:20090802 を参考にはてなの画像認証をクラックしてみました。CAPTCHAの画像をHTMLを解析して自動収集するところから書き始めたりして、全然30分では終わらず3時…

Google CodeのWikiが編集・削除できない時の対処

結構前から、OpenCvSharpのGoogle Codeで、Wikiを編集しようとしても500 Server Errorが出て何もできないという状態が続いていました。かくなるうえは削除、と思っても、それも Update Collision が出るため、できませんでした。

Mono対応版リリース

OpenCvSharp.dllの部分についてはすべてDllImportかC#のみで実装し直したため、OpenCvSharpで書かれた大抵のプログラムは、そのままバイナリをLinux等へ持っていくだけでMonoで動作します。きっと。 MachineLearningとBlobについてはOpenCvSharpExtern.dllを…

Visual C++ Redistributable

リリースしてあるものではなくてSVNの方の最新版の話ですが、当方で試してみた限りでは、2005 SP1が無い場合はBadImageFormatExceptionが出ました。2008 SP1の方は、アンインストールしても動いたので、たぶん要らないような気がします。ということで、以後…

Ubuntu9.04 + Mono2.4 で動作確認

多大なる苦労の末、ようやく動きました。動かすまでの手順をものすごく大雑把に書けば、以下のようになります。 MonoやOpenCVをインストール OpenCvSharpExtern.dllはWindowsバイナリなので、LinuxバイナリであるlibOpenCvSharpExtern.soをつくる libcv.so.2…

mono対応に書き換え中

またまた内部仕様が変わりまくりです。既にコア部分の対応は大体終わっていて、windows版のmono2.4では動作を確認できました。残るはMLやBlobの部分で、この辺りはC++/CLIで実装してあるので、これを全部やめてC#で書き直さなければなりません。しかし、ここ…

OpenCvSharpをつかう その5 (平滑化)

その1 その2 その3 その4 今回はcvSmoothを使った平滑化です。 ただし、画像に対して平滑化をかけるのではサンプルと比べて代わり映えもしませんので、ここでは普通のマネージ配列に対してガウシアンフィルタをかけてみます。今回はほとんど説明は無し。

.NET Framework 2.0に対応させた

新しいバージョンをリリースしました。WPF関連はOpenCvSharp.Extensions名前空間に追いやって、コアの部分は2.0で動くようになりました。これで欠点の一つは克服。プログラミング.NET Framework 第4版 (プログラミングシリーズ)作者: Jeffrey Richter,藤原雄…

OpenCvSharpを使う その4 (フィルタリング)

その1 その2 その3 今回はIplImageと並んで重要な配列オブジェクトであるCvMatについてご説明しようと思います。CvMatを使う例としてここではcvFilter2Dを用いたフィルタリング処理を行います。

OpenCvSharpを使う その3 (グレースケールに変換)

その1 その2 今回は読み込んだカラー画像をグレースケールに変換します。OpenCVの関数にはグレースケール画像しか受け付けないというものが相当数存在するので、これは重要な処理です。 (最初からLoadMode.GrayScaleにしてグレースケールで読み込めばいいじ…

.NET Framework 2.0へ対応させたい

現在OpenCvSharpは.NET Framework 3.5が必要ですが、これを2.0にしたいと考えていて、今書き直し中です。この前「もう仕様はあまり変わらない」とか言っておきながらやや心苦しいですが。理由としては.NET Framework 2.0の普及率の高さやVisual Studio 2005…

OpenCvSharpを使う その2 (画像の読み込み)

今回は画像を読み込んで表示したりします。 class Program { static void Main(string[] args) { IplImage img = Cv.LoadImage("lenna.png"); Cv.NamedWindow("window"); Cv.ShowImage("window", img); Cv.WaitKey(); Cv.DestroyWindow("window"); Cv.Releas…

OpenCvSharpを使う その1 (準備)

※NuGetパッケージを公開しました。この記事より簡単に導入できますので、今後はNuGetをお勧めします。説明は以下から。 http://schima.hatenablog.com/entry/2013/12/15/110513 開発がひとまず一段落し、もう今後大きく仕様が変わることはなさそうなので、こ…

MLのラップ完了

OpenCVのML(Machine Learning : 機械学習)のラップが完了しました。厳密にはやや抜けているメソッドがあるのですが、おそらく使えるレベルにはなったはずです。 残るはcvauxのみ。OpenCVの次のリリースに間に合うかどうか。 http://opencv.jp/opencv-1.1.0/d…

アンマネージ関数にdelegateを渡すと落ちるのは解決

delegateとかアンマネージとかあまり関係有りませんでした、すみません。Releaseモードだとオブジェクトの生存期間が変わってしまうのが原因でした。基本的には以下のページと同様の現象です。http://blogs.wankuma.com/shuujin/archive/2007/05/15/76794.as…

アンマネージ関数にdelegateを渡すと落ちる

前回の記事の件で訂正。もう少し探っていくと、2重のdelegateでなくとも単にアンマネージ関数に空のdelegateを渡すだけでも落ちていました。お手上げ状態なのは相変わらずです。GCが発動すると落ちるということしかわかっていません。そのアンマネージ関数と…

GoogleCodeにお引越し

今までリポジトリはCodeReposにありましたが、ここ1週間かけてsvnsyncを敢行し、GoogleCodeに移しました。以前からOpenCvSharpはGoogleCodeとCodeReposの2つのページがあってよくわからない状況になっていました。これには事情があって、最初はCodeReposで、…

cvのコメント英語化完了

おかげさまで行数が天井知らずに増えております。あとはcxcoreの方をやればほぼ終わったも同然になります。終わった暁には、XMLドキュメントコメントが日英両対応という素敵な状態になります。コンピュータビジョン ―アルゴリズムと応用―作者: Richard Szeli…

ConvexHull2をラップ

Convex Hullは日本語では凸包と訳されます。平面上の点がいっぱいあったとき、その一番「外側」の点を結んでできた線です。 cvConvexHull2の返り値のCvSeqから凸包の頂点を取り出す際、2重ポインタ(CvPoint**)が出てくるためその扱いに苦慮しています。今の…

cvblobをラップ

少し前に要望が有ったので、組み込んでみました。まだ進捗は半分程度といったところですが、サンプルは動きました。 ソースはこのような感じです。ほぼcvblob付属のtest.cppの直訳です。 using (IplImage img = new IplImage("shapes.png", LoadMode.Color))…

OpenCvSharp2

C#で書き直していましたがおそらく全て終わりました。拡張メソッドを使うことで結構省力化できたように思います。大体C++/CLI実装と互換性はあるんじゃないかと思いますが、やや変えてる部分はあります。 また、なんとコミッタさんが現れたため、未実装の関…

FindContoursを実装

CvSeqを使う関数は何かとラッパー的に面倒なので避け気味なのですが、頑張って実装しました。最近たまっていた分を含めてリリースしておきました。Sandcastleのバージョンを上げたので、以前よりもヘルプが見やすくなっていると思います。 以下の画像はOpenC…

アンマネージ関数の動的呼び出し

C#でアンマネージな関数を使いたければ、DllImportを使うのが常道です。しかし、定義の際に必ずstaticをつけることからもわかるように、静的な定義であり、プログラムの実行中に動的に関数名を決めてロード、といったことはできません。C/C++ではWin32APIのL…