第1回 OpenCVとは? 最新3.0の新機能概要とモジュール構成:OpenCV入門【3.0対応】(1/2 ページ)
オープンソースのコンピューター・ビジョン・ライブラリ「OpenCV」 3.0のリリースに合わせて連載再始動! 今回はOpenCVの概要と基本機能を紹介する。ベータ→正式版に合わせて改訂。
ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「www.buildinsider.net」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
1. OpenCV
1.1 OpenCVとは
OpenCV(正式名称: Open Source Computer Vision Library)は、オープンソースのコンピューター・ビジョン・ライブラリです。コンピューターで画像や動画を処理するのに必要な、さまざま機能が実装されており、BSDライセンスで配布されていることから学術用途だけでなく商用目的でも利用できます。加えて、マルチプラットフォーム対応されているため、幅広い場面で利用されていることが特徴です。
OpenCVは、Intelで開発され、その後、ロボティクス関連のハードウェア/ソフトウェアの開発を行っているWillow Garageに開発が引き継がれた後、現在はコンピュータービジョンの技術開発を手掛けるItseezによって開発が進められています。
OpenCVを使うと、主に以下のような機能を利用できます。
- フィルター処理
- 行列演算
- オブジェクト追跡(Object Tracking)
- 領域分割(Segmentation)
- カメラキャリブレーション(Calibration)
- 特徴点抽出
- 物体認識(Object recognition)
- 機械学習(Machine learning)
- パノラマ合成(Stitching)
- コンピュテーショナルフォトグラフィ(Computational Photography)
- GUI(ウィンドウ表示、画像ファイル、動画ファイルの入出力、カメラキャプチャ)
図1はOpenCVの機能の一部を紹介した図です(「CVPR 2015チュートリアル資料」から引用)。
図1 OpenCVの主要機能
core(データ構造、行列演算、エラー処理など)とhighgui、imgcodecs、videoio(GUI、画像ファイル入出力、動画ファイルの入出力、カメラキャプチャ)をベースとして、このような多種多様な機能が提供されています。各英単語の意味は、上記の箇条書きを参考にしてください。
1.2 歴史
OpenCVは、2006年に1.0がリリースされ、2009年にメジャーバージョンが実施され2.0がリリースされました。その後、しばらく2.4.x系のリリースが続いた後、ついに2015年6月にメジャーバージョンが実施され、3.0がリリースされました。
バージョン | リリース年月 |
---|---|
1.0 | 2006.10 |
2.0 | 2009.10 |
2.1 | 2010.4 |
2.2 | 2010.12 |
2.3 | 2011.7 |
2.4 | 2012.5 |
2.4.1 | 2012.6 |
2.4.2 | 2012.7 |
2.4.3 | 2012.11 |
2.4.4 | 2013.3 |
2.4.5 | 2013.4 |
2.4.6 | 2013.7 |
2.4.7 | 2013.11 |
2.4.8 | 2013.12 |
2.4.9 | 2014.4 |
2.4.10 | 2014.10 |
2.4.11 | 2015.2 |
3.0 | 2015.6 |
表1 バージョンごとのリリース年月 |
また、CVPR 2015チュートリアル資料の情報によると、OpenCV 3.1は2015年の4Qにリリース予定のようです。
2. OpenCV 3.0とは
2.1 構成技術
OpenCV 3.0の構成技術を図2に示します(「CVPR 2015チュートリアル資料」から引用)。これらの詳細は後述します。
- マルチプラットフォーム対応(「2.2 サポートOS」)
- 多言語バインディング(2.3.1 公式サポート言語」)
- ハードウェア機能を用いた最適化(「4.2.3 HAL(Hardware Acceleration Layer)」)
また、OpenCVではGoogle Summer of Code(GSOC)の成果をベースにして、機能の追加やチュートリアルの拡充が行われています。図3はOpenCV GSOC 2014の成果がまとめられたムービーです。ここで紹介されている機能の多くが、OpenCV 3.0から利用できるようになっています。
図3 OpenCV GSOC 2014の成果がまとめられたムービー
図4はOpenCVを用いた人体追跡のデモムービーです。
図5はRaspberry Pi上でOpenCVを動作させ、テニスボールを追跡するデモです。OpenCVはARM Linuxもサポートしているため、このような小型コンピューター上でも(CPUやメモリの制約はありますが)OpenCVを動作させることができます。
図5 テニスボール追跡
2.2 サポートOS
OpenCV 3.0では、以下のプラットフォームが公式サポートされています。
- Windows
- Linux
- Mac OS
- iOS
- Android
- Windows RT
iOSやAndroidにも対応していることから、モバイル端末向けのアプリケーションにも利用できます。また、ARM環境のLinuxも対応しているため、Raspberry Pi上でも動作させることができます。
2.3 サポート言語
2.3.1 公式サポート言語
OpenCV 3.0では、以下の言語が公式サポートされています。
- C(既存のI/F(=インターフェース)は残っているが、3.0からメンテナンス対象外)
- C++
- Python
- Java
また、バージョンごとの言語サポート状況は以下の通りです。この内容からも分かるように、バージョンを重ねるごとにサポート言語が充実してきています。
バージョン | サポート言語の変更内容 |
---|---|
1.0 | C APIサポート |
2.0 | C++ APIのサポート追加 |
2.2 | Pythonバインディングのサポート追加(Python2系のみ) |
2.4.4 | Javaバインディングのサポート追加 |
3.0 | C APIがメンテナンス対象外となる。 PythonバインディングでPython3系のサポートも追加 |
表2 OpenCVバージョンごとの言語サポート状況 |
ただし、上記の箇条書きと表でも説明したように、OpenCV 3.0からC APIがメンテナンス対象外になります(既存のI/Fは残っているものの、バグ対応やI/F変更への追従は行われない)。このため、今後、OpenCVを使ったアプリケーションを開発する場合は、極力C APIは用いず、C++ APIもしくは他のバインディングを用いて開発することをお勧めします。
2.3.2 非公式バインディング
非公式バインディングのうち、継続して更新が行われているものを以下にピックアップしました。執筆時点で3.0対応のバインディングはEmgu CVのみですが、今後対応される可能性があるため、興味のある方はこれらの動向をチェックしておくとよいでしょう。
バインディング名 | 言語 | URL |
---|---|---|
OpenCvSharp | .NET Framework | https://github.com/shimat/opencvsharp |
Emgu CV | .NET Framework | http://www.emgu.com/wiki/ |
ruby-opencv | Ruby | https://github.com/ruby-opencv/ruby-opencv |
表3 主要な非公式バインディング |
また、その他の非公式バインディングについては、私の個人サイトにある「OpenCV bindingまとめ」にまとめてあります。興味のある方はご参照ください。
2.4 入出力サポート画像
OpenCVは、以下の画像フォーマットの入出力をサポートしています。詳細は公式ドキュメントを参照してください。
フォーマット | 拡張子 |
---|---|
Windows bitmap | .bmp / .dib |
JPEG | .jpeg / .jpg / .jpe |
JPEG 2000 | .jp2 |
PNG | .png |
Sun rasters | .sr / .ras |
TIFF | .tiff / .tif |
OpenEXR Image | .exr |
WebP | .webp |
Portable image format | .pbm / .pgm / .ppm |
表4 入出力サポート画像 |
Copyright© Digital Advantage Corp. All Rights Reserved.