画像処理のプログラムでは、当然ながら画像の表示や、操作するボタンなどが欲しくなるので、GUIのプログラム作成が簡単なC#が割とよく用いられています。
しかし、画像処理そのものをC#でやるには処理速度に不満もあるので、GUIはC#、画像処理部はC言語で処理が書かれた画像処理ライブラリを用いる事となります。
そこで、C#から使える画像処理ライブラリにはどんなものがあるのか?紹介したいと思います。
個人で使うなら
ほぼ、OpenCvSharpで決まりだと思います。
USBカメラも使えるし、バージョンアップもされているし、作者は日本人なので。。
OpenCVをラップしているので、画像処理時間も普通にプログラムを組むよりは圧倒的に速いかと思います。
インストール方法については、GitHubに少し書かれていますが、NuGetからインストールするのが基本のよう。
詳細は「OpenCvSharp インストール」で検索してみて、新しめの記事を参照して頂ければわかると思います。
マニュアル
https://shimat.github.io/opencvsharp_docs/index.html
GitHub
https://github.com/shimat/opencvsharp
会社で使うなら
「会社で使う」というか、使用するカメラが工業用のカメラを使うなら、以下の2つの画像処理ライブラリが、よく使われているように感じます。
両方とも数十万円するので、個人で買えるようなレベルではありませんが、OpenCVと何か違うか?というと、私が思うにはテンプレートマッチングの性能と工業用のカメラに対応している部分だと思います。
テンプレートマッチングについては、OpenCVのテンプレートマッチングでは回転やスケール変動には対応していませんが、これらのライブラリは対応しています。
さらには、袋の表面に印刷された画像のように、画像が歪んだ状態でもマッチングしてくれる機能もあります。OpenCVにも特徴点ベースのマッチングはありますが、やっぱりこっちの方が良いかと思います。
工業用のカメラを使うと何がいいか?という部分についてですが、カメラの画素数やフレームレートなどもそうですが、一番大きいのは同期撮影が出来る点だと思います。
例えば、ベルトコンベア上を流れる製品を撮影するような場面では、被写体は毎回画像の中央で撮影したくなりますが、カメラのフレーム単位で撮影タイミングを制御できないと、毎回撮影位置がばらついてしまいます。
OpenCVからは工業用のカメラを制御することは、ほとんどの場合、出来ないのですが、カメラ専用のSDK(もしくは画像入力ボードのSDK)を用いて画像を撮影し、撮影したデータをOpenCVに渡して画像処理を行う事も可能なので、やっぱり、一番差が大きいのはテンプレートマッチングの性能でしょうかね。
ちなみに、マシンビジョン業界でPythonが使われる事はほとんどありません。(聞いた事がありません。)
Pythonが出来ない私。。
←画像処理のためのC#へ戻る