OpenCV
OpenCV(オープンシーヴィ、Open Source Computer Vision Library)とはインテルが開発・公開したオープンソースのコンピュータビジョン向けライブラリ。2009年にWillow Garage(ウィロー・ガレージ)に開発が移管され、さらにその後Itseezにメンテナンスが移管されたが、2016年5月にインテルがItseezを買収することが発表された。
・画像解析および機械学習等の機能を持つC/C++、Java、Python、MATLAB用ライブラリ。プラットフォームとしてmacOSやFreeBSD等全てのPOSIXに準拠したUnix系OS、Linux、Windows、Android、iOS等をサポートしている。
1999年にプロジェクト開始。最初のアルファ版が公開されたのは、国際会議CVPR 2000 (IEEE Conference on Computer Vision and Pattern Recognition 2000) である。2001年から2005年の間に5つのベータ版がリリースされた。1.0版がリリースされたのは2006年。
2008年にWillow Garageによるサポートを受け、開発状況が再び活発になった。2009年10月に2回目のメジャーバージョンアップが実施され、2.0版がリリースされた。OpenCV 2.4.4以降ではJavaが公式にサポートされている。OpenCV 2.x系列は2018年2月に2.4.13.6がリリースされた後、メンテナンスされていない。
2015年6月に3回目のメジャーバージョンアップとしてOpenCV 3.0が正式リリースされた。OpenCV 3.0では従来のC言語関数形式のインターフェイスはレガシーAPI扱いとなりメンテナンスが終了しているため、代わりにC++ APIを使うことが推奨されている。2015年12月にリリースされたOpenCV 3.1では、Google Summer of Code 2015の成果物の取り込みなど、多数の機能が追加されている。
2018年11月にOpenCV 4.0がリリースされた。C++11規格準拠コンパイラが必須となり、またC言語APIは廃止された。
2021年現在、OpenCV 3.x系列のメンテナンスと4.x系列の開発が続けられている。
実装分野は次の通り。
(Image Processing)
勾配、エッジ、コーナー (Gradients, Edges and Corners)
サンプリング、補間、幾何変換 (Sampling, Interpolation and Geometrical Transforms)
数学的モルフォロジー演算 (Morphological Operations)
フィルタと色変換 (Filters and Color Conversion)
ピラミッドとその応用 (Pyramids and the Applications)
画像分割、領域結合、輪郭検出 (Image Segmentation, Connected Components and Contour Retrieval)
画像と形状のモーメント (Image and Contour Moments)
特殊な画像変換 (Special Image Transforms)
ヒストグラム (Histograms)
マッチング (Matching)
ラベリング (Labeling) : OpenCV 3.0以降
構造解析 (Structural Analysis)
輪郭処理 (Contour Processing)
計算幾何 (Computational Geometry)
平面再分割 (Planar Subdivisions)
モーション解析と物体追跡 (Motion Analysis and Object Tracking)
背景統計量の累積 (Accumulation of Background Statistics)
モーションテンプレート (Motion Templates)
物体追跡 (Object Tracking)
オプティカルフロー (Optical Flow)
推定器 (Estimators)
パターン認識 (Pattern Recognition)
物体検出 (Object Detection)
カメラキャリブレーションと3次元再構成 (Camera Calibration and 3D Reconstruction)
カメラキャリブレーション (Camera Calibration)
姿勢推定 (Pose Estimation)
エピポーラ幾何 (Epipolar Geometry)
単純ベイズ分類器 (Naive Bayes Classifier)
k近傍法 (K Nearest Neighbors)
サポートベクターマシン (SVM)
決定木 (Decision Trees)
ブースティング (Boosting)
Random forest (Random forest)
EMアルゴリズム (Expectation-Maximization)
ニューラルネットワーク (Neural Networks)
シンプルGUI (Simple GUI)
画像の読み込みと保存 (Loading and Saving Images)
ビデオ入出力 (Video I/O)
OpenGL/Direct3D相互運用
OpenCVの機能はいくつかのライブラリモジュールに分割して実装されている。モノリシックな1ファイル(worldモジュール)にビルドすることも可能であるが、通常は必要なものだけ個別のモジュールとしてビルドする。
ビデオ入出力モジュールではWebカメラに代表されるUVCデバイスを扱うことができる。モジュールをビルドする際に、サポートするバックエンドとしてFFmpeg、Video4Linux、Video for Windows、DirectShow、、OpenNIなどを選択することができる。
OpenCV 2.1 でSSE拡張命令を使用した最適化コードが実装されている。OpenCV 3.0でIntel IPPのサブセットがIPPCVとして寄贈され、デフォルトで使用されるようになった。そのほか、Intel TBBやOpenMPを利用した並列化も実装されている。OpenCV 3.1ではクロスプラットフォームなSIMDアクセラレーションのためのUniversal Intrinsicsが導入され、従来からのSSE (x86) 命令のサポートに加え、AVX (x86) 命令やNEON (ARM) 命令のサポートも加わっている。
OpenCV 2.2 でCUDAを使ったアクセラレータであるgpuモジュール、OpenCV 2.4.3 でOpenCLを使ったアクセラレータであるoclモジュールが追加された。gpuモジュールを有効にするためには、OpenCVをWITH_CUDA=ON構成でビルドする必要がある。また、oclモジュールを有効にするためには、OpenCVをWITH_OPENCL=ON構成でビルドする必要がある。なおOpenCV 2.4.11時点で、公式のWindows用ビルド済みバイナリではCUDAは有効にされていないが、OpenCLは有効にされている。またgpuモジュールおよびoclモジュールはともに、従来のCPUベースのOpenCV機能と比べて、対応するチャンネルフォーマットに関して制約がある。そのほか、gpuモジュールを使用するためには、CUDAに対応したNVIDIA製GPUを、そしてoclモジュールを使用するためには、OpenCL 1.1に対応したハードウェアを用意する必要がある。
なお、OpenCV 3.0ではgpuモジュールはcudaモジュールに改称され、また独立したoclモジュールは廃止されてOpenCVの各モジュールに透過API (Transparent API, T-API) として分散・融合されている。OpenCV 3.0にはOpenCLの相互運用を可能とするラッパーAPIも用意されており、OpenCL-C言語でカスタムカーネルを記述できるほか、OpenCL 1.2サポートを有効にしてOpenCVをビルドすることで、OpenCL 1.2対応のプラットフォームおよびデバイス上でOpenCL 1.2の機能(カーネルの分割コンパイル&リンクなど)を使えるようになる。また、オプションとしてOpenCL 2.0もしくはAMD (HSA) 拡張のShared Virtual Memoryもサポートしている。
公式に提供されているOpenCV APIとして、C/C++用インターフェイスのほか、Java、Python、MATLABバインディングが存在するが、そのほかにも非公式の各種言語向けのラッパーが存在する。
- OpenCV, FFmpeg, libdc1394, PGR FlyCapture, OpenKinect, videoInput, ARToolKitPlus のラッパー。バージョン1.0でOpenCV 3.0に対応。GPL v2ライセンスとApacheライセンスに対応。
.NET用ラッパー
- 商用利用不可、開発終了。
- GPL v2ライセンス、OpenCV 1.0対応、2007年のバージョン0.7を最後に更新停止。
- GPL v3ライセンスもしくは商用ライセンス、OpenCV 2.4.10/3.4.3/4.5.5に対応。Mono対応、Windowsストアアプリ対応。
- 3条項BSDライセンス、OpenCV 2.4.10/3.4.4/4.5.1に対応。Mono対応、.NET Core対応、UWPアプリ対応。
2021-03 - BSDスタイルライセンス (MIT)、Mono対応。
- Ruby 1.9.3/2.xおよびOpenCV 2.4.10に対応。BSDライセンス。
- Hot Soup Processor 3.1以降およびOpenCV 1.0に対応。Hot Soup Processorに付属。BSDライセンス。