「コンピュータビジョンのセカイ - 今そこにあるミライ」を連載している慶応義塾大学大学院の林昌希です。今回はコンピュータビジョンのつながりということで、2011年12月27日に刊行されたばかりの新刊「OpenCV 2 プログラミングブック」の書評をさせて頂きます。まずはOpenCVがどういうものかを御存知でない方のために、OpenCVの簡単な説明からはじめましょう。

OpenCVライブラリについて

OpenCV(Open Computer Vision Library)は実時間コンピュータビジョンアプリケーションのためのC/C++/Python向けオープンソースのプログラミングライブラリです。「オプティカルフロー」「パーティクルフィルタ」「顔検出」「局所特徴量」など、コンピュータビジョンの数多くの標準的技術がOpenCVにすでに組み込まれています。OpenCVは公開当初は研究用途向けのライブラリでありましたが、最近はiOSやAndroidの画像/動画/カメラ系アプリ開発にも用いられるようになってきており、年々その用途が広がっている印象です。

OpenCV 2.0から追加されたC++インタフェース

本書は前作「OpenCVプログラミングブック」の後継シリーズに相当するOpenCVバージョン2.0以降で追加されたC++言語インタフェースを用いたプログラミングを行うためのリファレンス本です(対応しているバージョンはOpenCV 2.2系と2.3系)。

 >「OpenCV 2プログラミングブック」はOpenCV 2以降、前作「OpenCV プログラミングブック 第2版」はOpenCV 1.1preの対応になっており、「OpenCV プログラミングブック 第2版」は電子書籍としても購入できます

OpenCVではバージョン2.0以降、それまでメインであったC言語によるインタフェースに加えて、そのC言語で提供されていた各関数がクラスとしてラッパーされたC++言語によるインタフェースが提供されており、C++言語によるオブジェクト指向開発が可能となりました。ところがこれまで日本語のOpenCV書籍では、前作の「OpenCV プログラミングブック」も含めて、OpenCV 2.0以降のC++インタフェースによるプログラミング方法を詳しく解説したものがなく、その意味で本書は待望の"C++インタフェース対応書籍"とも言えるでしょう。

本の内容

では具体的な本の内容ですが、本書は4章から構成されています。そのうち1章と2章が準備編で、3章と4章がメインの内容という構成。そのボリューム比はページ数にして約1:4(1/2章:3/4章)です。それでは以下で各章ごとにざっくりとですが、見ていきたいと思います。

Chapter1:導入編

画像処理、コンピュータビジョンとOpenCV 2.0系の導入解説がされています。導入として、この本がOpenCV 2.0系を使いこなすことが目的とすると述べられています。

Chapter2:スタートアップ編

OpenCVの導入方法の解説として、各OS(Windows7/ MacOS X 10.6 /Ubuntu 10.04 LTS)ごとに、OpenCVのインストール方法と各IDE(Visual Studio 2010/Xcode)での初期設定方法が解説されてあります。

1クリックのインストーラを用いた簡単なインストール方法の解説が提示されており、この章を読みながら作業すれば誰でもスムーズにOpenCVのインストールと開発環境の設定が可能です。ただ、UbuntuではIDEではなくコマンドラインでg++によりmakeする方法が解説されており、ここはUbuntuでもEclipseなどのIDEによる導入方法が述べられていても良かったかもしれません。また、C++とCのインタフェースを混在させる方法や、Pythonのインタフェースの導入方法も紹介されています。

Chapter3:リファレンス編

C++インタフェースのうち、サンプルコードとその実行結果をセットにして、以下の基本的な機能が紹介されているのがChapter3です。

  1. cv:Matの基本処理(画像データ/行列としての基本的な使い方)
  2. 線形代数(cv::Matを行列として用いる時の行列操作の方法)
  3. 画像処理(画像の回転、ぼかし処理、円や直線の検出、顔検出など)
  4. 描画処理(線や円やテキストを画面上に描画する方法)
  5. 入出力(画像の読み込みと保存、VideoCaptureクラスによるキャプチャ中の画像の読み込みなど)

前作と同様、基本的な処理のプログラミング方法が探してすぐ使えるようになっている構成です。ただし、本書ではもちろんOpenCVの公式のドキュメントや、Web上での各サイトやブログなどでの解説はあるのですが、書籍の形でパラパラとめくって目的の処理を探せることの利点は大きいです(実際私も研究でのコーディングに活用しています)。今後OpenCVを用いて開発する方には、大きな武器となるのではないでしょうか。

これらの基本的なクラスの機能の使い方をおさえたところで、実際のアルゴリズムを用いた各応用のプログラミング方法が紹介されているのが次のChapter4です。

Chapter4:ケーススタディ編

実際のアプリケーションごとのケーススタディが紹介されているのがこの4章です。まず冒頭でC++インタフェースの追加でわかりやすくなった「画素値の直接操作」について解説されています。それ以降、カメラキャリブレーションとステレオによる3次元復元、SURF特徴を用いたパノラマ画像の作成、顔パーツ認識を用いた笑顔度判定、混合ガウス分布によるクラスタリングなど、各アプリケーション例を用いてOpenCV 2.0の様々なクラスを具体的に用いた例が学べます。個人的には、極めて最近の追加機能である「KinectとOpenCVの連携」がすでに紹介されているのが素晴らしいと思えました。

「OpenCV 2プログラミングブック」カバーにある人の顔を、Haar-Like特徴を利用して検出してみたもの(分類器のカスケードはOpenCV付属のhaarcascade_frontalface_alt_tree.xmlを使用)

前作は基本的な画像処理のサンプルコードの割合が大きかった印象ですが、今作はこの4章のアプリケーション例でしっかりとコンピュータビジョンしているサンプルコードが増えています。ということは裏を返すと、予備知識がない人がいきなり読むと厳しいレベルの内容でもあります。とはいえ、動作するソースコードとその解説がコンパクトなボリュームで順番に書かれているので、予備知識が少なくても恐れるほどではないです。今回は良い意味で「標準的なレベルの」コンピュータビジョンによるアプリケーション例が提供されていると思います。

右が本を傾けオプティカルフローを計算(ベクトルを表示)したもの

まとめ

以上、駆け足ながら本の内容の紹介と、簡単なレビューをさせて頂きました。

基本的な各クラスの使い方をおさえるための辞書である3章と、実際のアプリケーションを作る際の参考例が並んだ4章という、目的に合わせて読み分けしやすい2部構成になっていて読みやすいと思います。コンピュータビジョンや画像処理が専門のエンジニア向けに、カバー範囲も広くて難易度も標準的な技術レベルに統一された良い標準的レベルが網羅されたリファレンス本になっています。OpenCVによるC++プログラミング力を強化するために、あなたの書棚にもこの本を加えてみてはいかがでしょうか。

ちなみに、同社からはロベールのC++入門講座という優れたC++言語の解説書も発売されています。初心者の勉強と中級者の勉強に適した本で、詳しく、かつわかりやすくC++言語の解説がなされており、今回紹介した「OpenCV 2プログラミングブック」で初めてC++言語に挑戦する方だけでなく、C++の実力を強化したいという方には同書もおすすめします。

「OpenCV 2 プログラミングブック OpenCV 2.2/2.3対応」

発行:マイナビ 発売:2011年12月27日 著者:OpenCV 2 プログラミングブック制作チーム 単行本:B5変形判/296ページ 定価:3,570円 出版社から:コンピュータに「視覚」を与えるプログラミング! 画像処理ライブラリの定番「OpenCV 2」を徹底解説。

OpenCVは2500以上のアルゴリズムをカバーする画像処理ライブラリ。OpenCV 2.0からはC言語に加えC++/Pythonインタフェースが導入され新たな使い方が可能となり、機能も大幅に拡充されています。Windows、Mac、Linuxのプラットフォームをカバーしているため、コンピュータビジョンの標準ライブラリとしての地位を築きつつあります。

本書ではOpenCV 2系の導入と開発環境の構築、実行までを分かりやすく解説。また「リファレンス編」では必須アルゴリズムの基本的な使い方を数多く取り上げ、「ケーススタディ編」ではOpenCV 2の活用例として理論・モデルの実装を紹介します。

コンピュータで"モノを見る"プログラミングに必携の1冊です