皆さん、こんにちは!
今回は機械設計エンジニアの僕が今勉強している画像処理を題材に記事を作成しました。
僕もビジョンセンサで有り無し検知や外観検査をすることがあるのですが、画像処理って難しいですよね。
メーカー品のビジョンセンサだとだいぶ簡易的に設定ができるので、なんとなくポチポチ設定してちょっとパラメータいじって現物で調整して認識率が上がった状態で導入するって感じです。
この記事ではこんなお悩みや疑問を解決します。
- OpenCVってなに?
- 自分で画像処理をしてみたい
- 自動化でビジョンについて学びたい
- お金をかけずに画像処理ができるソフトウェアを探している
結論から言うとOpenCVとは画像処理や動画処理ができるオープンソースのソフトになります。お金をかけずに画像処理に触れてみたい人にはおすすめ。ただし、プログラミングの必要があります。
以下で詳しく見ていきましょう!

OpenCVとは

このブログを見ている方は基本的に機械設計関係の方が多いと思いますので、専門分野外の人が大半かと思います。そこで簡単に言うとOpenCVとは画像処理や動画処理ができるオープンソースのライブラリになります。
困ったことに公式サイトは英語になりますが情報はネット上に結構転がっています。
例えば、ビジョンセンサなどを使った人は想像しやすいと思いますが、市販のビジョンセンサでは人を撮像したときに撮像範囲に移っている人の顔をしっかりと人の顔として認識するように簡単に設定ができます。
操作としては簡単に設定できますがその中では複雑な理論に基づいたプログラムが走っています。
OpenCVではそのプログラムの部分を作成を手助けしてくれるライブラリになります。とはいっても画像処理の理論的な部分は理解しないといけません。
画像処理には専門的な知識が必要になります。さらにはプログラミングの知識も必要になり、かなり敷居が高い分野です。しかし、OpenCVのおかげでその敷居もかなり低くなります。
フリーソフトなので無料で気軽に導入することができます。さらに商用利用も可能です。
産業利用も活発ですでにロボット開発や人工知能開発などに取り入れられています。
コードでは「C」「C++」「Java」「Python」などの言語が使用できます。Pythonが使用できるのでプログラミングの部分も少ないコードで済みます。CやC++の方がネット上の情報は多いようです。
OSはWindows、Mac、Linuxなどで使用できます。ラズベリーパイ(マイコン)とも相性がいいですね。
OpenCVでできること

OpenCVは本当にできることが多いです。OpenCVをマスターすればそれだけでかなり重宝される人材になるはずです。
具体的にはこんなことができます。
- 画像・動画の読み込みや表示などの操作
- 画像の編集
- 機械学習
- 画像認識(物体検出)
- 物体追跡
- カメラのキャリブレーション
PC上やサーバー上にある画像を読み出して表示することや編集した画像を登録したりすることができます。画像の編集ではサイズを変えたり、トリミングしたりすることができます。他にもカラー画像をグレースケールへの変換したり、2値化したりエッジ検出したりすることもできます。
機械学習もできます。例えば教師あり学習で人の顔の特徴や車の特徴を覚え込ませで物体検出や物体追跡などに応用することもできます。
カメラのキャリブレーションもできるのもポイントが高いです。
ロボットアームで掴むワークの画像を登録しておきます。カメラの撮像範囲内にワークがあればワークの中心位置の座標を検出してロボットに送るようなこともできますね!
ロボットのビジョンセンサに応用できる

僕が注目しているのはロボットや自動化分野での使用になります。
ビジョンセンサはそれだけでかなりの値段がします。便利なのですが、あまり性能の要求されないような場面では使えませんよね。特に趣味で使うような場合ではとても手が出ません。
30万画素程度のビジョンセンサでも数十万から100万円を超えるようなものもあります。
そういう時にOpenCVを使うとWebカメラなどを使って画像処理ができると格安でビジョンセンサを作ることができます。もちろん簡単ではありませんが。
キャリブレーションの機能もありますし、物体検出などもできるので簡単なピッキングやピックアンドプレース用のロボットビジョンには十分使用できると考えます。
実際にOpenCVを使ってビジョンセンサ作ってるメーカーっていっぱいあるんじゃないかなと思ってます。
個人で使用するにしても僕がやりたいようなレベルのことは情報はネット上にたくさんあるようです。
OpenCVの勉強の仕方
僕はUdemyで「【Pythonで学ぶ】OpenCVでの画像処理入門」というOpenCV教材を購入し勉強しました。
こんな方にお勧めです。
- OpenCVの入門教材を探している
- 【Pythonで学ぶ】OpenCVでの画像処理入門を購入しようか迷っている
Pythonの基本構文を勉強したことがある方でOpenCVの入門教材を探している方であればかなりおすすめの教材です。
Udemy内ではベストセラーのタグが付いており、僕の受講時で星4.3の高評価でした。(満点は星5)
僕はセール中に2,000円弱で購入しました。(1,800円ぐらいだったかな?)
【Pythonで学ぶ】OpenCVでの画像処理入門へのリンク
動画の時間は6時間ほどになります。視聴するだけであれば休日の1日でできます。実際に手を動かしながらしっかり勉強するのであれば2〜3倍の時間はかかるでしょう。
基本的にWindowsベースで進みますがMacなどでも十分受講可能です。
Pythonの基本的な文法については解説がありません。
Pythonに触れたことがない人は他の講座や学習サイトなどの教材で一通り勉強しておいた方がいいと思います。
Pythonの学習サイトは実際に手を動かして学べるpizaラーニングをおすすめします。
また微分や線形代数、テイラー展開などの数学の話が出てきますが、この辺りの数学は特に理解していなくても学習できます。
僕も何も考えずそういうもんなんだと思い進めました
簡単に理論を説明してくれるので画像処理がどのような考え方でされているのかイメージはつくようになりました。
この手のジャンルの入門編の教材としては僕はかなりわかりやすい方だったと思います。
少なくとも書籍での学習より先にこちらで学習することをおすすめします。
セール中に購入すると入門書1冊分ぐらいの値段ですし。
レビューコメントも豊富にあるのでぜひ参考にしてみてください。
ちなみにレビューコメントへの返信で講師のTetsuya Tさんが「OpenCVが使えると機械学習はもちろん、製造業の検査の画像処理プログラムの開発に携わるということもできると思います。」というコメントをしていたのが僕の受講の決め手になりました。※この講座だけでできるようになるとは言ってません。
【Pythonで学ぶ】OpenCVでの画像処理入門で学べること
この講座で学べることは以下になります。
- 環境の構築(OpenCVの導入)
- 画像/動画の入出力
- トラックバー / マウスイベント
- 色空間/グレースケールへの理解
- 平滑化/エッジの検出などの畳み込み処理
- 2値化
- 特徴点の抽出
- 色検出、オプティカルフローなどの物体追跡
- パーティクルフィルターの理論と実装
またこの講座では「機械学習」は取り扱っていません。
具体的には人の顔の画像から輪郭のエッジを取ったり、ビルの画像から特徴点を自動で検出したりします。
動画では動いている船を追跡したり、電車を追跡したりします。
思ったよりも実践的な内容でもあり講座自体が面白かったです。
図形の重心を取ったり面積を表示したりする方法の説明もあり、ロボットのピッキングに使えそうです!
サンプルコードもあるので周りのものを使って実際に練習できます。
まとめ
OpenCVとは画像処理や動画処理ができるオープンソースのソフトになります。
お金をかけずに画像処理に触れてみたい人にはおすすめ。
ただし、プログラミングができる必要があります。
具体的にはこんなことができます!
- 画像・動画の読み込みや表示などの操作
- 画像の編集
- 機械学習
- 画像認識(物体検出)
- 物体追跡
- カメラのキャリブレーション
他にも画像処理関連の情報を追加していきますので乞うご期待を!