SharperCV
いやぁ、最近はC#でコーディングする機会が多く、なんとか.NetからOpenCVが使えないか?といろいろ探していましたがこちらで、ちょっとエキサイティングな記事を見かけました。
http://chihara.naist.jp/people/2004/kenta-t/OpenCV/pukiwiki/index.php?SharperCV
ダウンロードはこちらのようです。
http://www.cs.ru.ac.za/research/groups/SharperCV/
なになに?こちらを読んでみると、
- しばらく保守されていないというか、プロジェクト自体が放棄された
- もともとの目的は、.NetのManaged CodeとOpenCVのUnmanaged Codeの相互運用(interop)の実験目的だった。
- 今となっては、.NETからのAVIファイルのハンドリングはDirectXやDirectShowがあるので、時代遅れのOpenCVを使うメリットはない。
- soufceforgeに寄付したが、リーダー役がいなかった。
- とりあえず、ソースを公開した。
なんだか、ネガティブな感じ満々で、かなり手厳しい感じですが、C#の動作確認コードも紹介されていたことですし、折角なので、IronPythonから叩いてみます。
SharperCVConsole.py
# # SharperCVConsole.py # # for sys import sys # for clr import clr clr.AddReferenceByPartialName("IronPython") import IronPython # for sharperCV sys.path.append("c:\\sharpercv\\bin") clr.AddReferenceToFileAndPath("c:\\sharpercv\\bin\\openCVWrapper.dll")
とりあえず、こんな感じでコンソールから叩く最低限のコードを書いて、下記のようなバッチファイルでIronPythonのインタラクティブシェルを起動します。
SharperCVConsole.bat
..\IronPython\IPCE-r7\ipy\ipy.exe -i -D -X:ColorfulConsole -X:AutoIndent -X:ExceptionDetail -X:TabCompletion SharperCVConsole.py
そこで、インタプリタから、
import SharperCV window = SharperCV.CvWindow("Sample")
のように入力してやると、名前付きWindowが表示されるので、どうやらimport SharperCVをするだけで、highguiまで動作するようです。
もう、すでにこの段階でOpenCVのライブラリリファレンス通りではないということがわかります。
OpenCVのPythonインターフェースだと、上記のコードは下記に相当します。
import opencv.cv import opencv.highgui window = opencv.highgui.cvNamedWindow("Sample")
.NETのManaged Codeにラッピングする際に整理したのかもしれませんが、OpenCVユーザとしては、この差異をマスターしないといけないかもしれません。
名前空間とクラスをリストアップしてみるとこんな感じで、かなり再構築されている感があります。
- SharperCV
- AVIWriter
- CvCapture
- cvContour
- cvContoursBase
- CvHistogram
- CvImage
- CvMat
- CvPoint
- CvPoint2D32f
- CvRect
- CvScalar
- CvSeq
- CvSize
- CvTermCriteria
- CvWindow
- PointSetD
- VertexContour
- VertexContours
- SharperCV.Haar
- ClassifierCascade
- HiddenClassifierCascade
- SharperCV.Trackers
- LkTracker
#果たして、OpenCVのすべての機能が移植されているのだろうか・・・。
#ちょっと気になるところではあります。