OpenCV

出典: フリー百科事典『ウィキペディア(Wikipedia)』

出典: フリー百科事典『ウィキペディア(Wikipedia)』
OpenCV
開発元 インテルWillow Garage、Itseez
最新版 4.1.1 / 2019年7月26日(58日前) (2019-07-26
リポジトリ github.com/opencv/opencv
プログラミング言語 C++
対応OS Windows, Linux, FreeBSD, macOS, Android, iOS
プラットフォーム クロスプラットフォーム
対応言語 C/C++JavaPython
種別 ライブラリ
ライセンス BSDライセンス
公式サイト opencv.org
テンプレートを表示

OpenCV(オープンシーヴィ、英語: Open Source Computer Vision Library)とはインテルが開発・公開したオープンソースコンピュータビジョン向けライブラリ[1]。2009年にWillow Garage(ウィロー・ガレージ)に開発が移管され、さらにその後Itseezにメンテナンスが移管されたが、2016年5月にインテルがItseezを買収することが発表された[2][3]

概要[編集]

画像処理・画像解析および機械学習等の機能を持つC/C++JavaPythonMATLAB用ライブラリ[4]プラットフォームとしてmacOSFreeBSD等全てのPOSIXに準拠したUnix系OSLinuxWindowsAndroidiOS等をサポートしている。

歴史[編集]

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が公式にサポートされている[5]。OpenCV 2.x系列は2018年2月に2.4.13.6がリリースされており、3.x系列と同時にメンテナンスが続けられている[6][7][8][9]

2015年6月に3回目のメジャーバージョンアップとしてOpenCV 3.0が正式リリースされた。OpenCV 3.0では従来のC言語関数形式のインターフェイスはレガシーAPI扱いとなりメンテナンスが終了しているため、代わりにC++ APIを使うことが推奨されている[10]。2015年12月にリリースされたOpenCV 3.1では、Google Summer of Code 2015の成果物の取り込みなど、多数の機能が追加されている[11]

2018年11月にOpenCV 4.0がリリースされた[12]C++11規格準拠コンパイラが必須となり、またC言語APIは廃止された。

機能[編集]

実装分野は次の通り。

  • 画像処理 (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)

Windows版ではカメラ入力とリンクさせたい場合などでDirectX SDKが必要になることがある[疑問点]

OpenCV 2.1[13]SSE拡張命令を使用した最適化コードが実装されている。OpenCV 3.0でIntel IPPのサブセットがIPPCVとして寄贈され、デフォルトで使用されるようになった[14]。そのほか、Intel TBBOpenMPを利用した並列化も実装されている。OpenCV 3.1ではクロスプラットフォームなSIMDアクセラレーションのためのUniversal Intrinsicsが導入され[15]、従来からのSSE (x86) 命令のサポートに加え、AVX (x86) 命令やNEON (ARM) 命令のサポートも加わっている。

OpenCV 2.2[16]CUDAを使ったアクセラレータであるgpuモジュール、OpenCV 2.4.3[17]OpenCLを使ったアクセラレータであるoclモジュールが追加された。gpuモジュールを有効にするためには、OpenCVをWITH_CUDA=ON構成でビルドする必要がある[18]。また、oclモジュールを有効にするためには、OpenCVをWITH_OPENCL=ON構成でビルドする必要がある[19]。なおOpenCV 2.4.11時点で、公式のWindows用ビルド済みバイナリではCUDAは有効にされていないが、OpenCLは有効にされている。またgpuモジュールおよびoclモジュールはともに、従来のCPUベースのOpenCV機能と比べて、対応するチャンネルフォーマットに関して制約がある。そのほか、gpuモジュールを使用するためには、CUDAに対応したNVIDIAGPUを、そしてoclモジュールを使用するためには、OpenCL 1.1に対応したハードウェアを用意する必要がある。

なお、OpenCV 3.0ではgpuモジュールはcudaモジュールに改称され、また独立したoclモジュールは廃止されてOpenCVの各モジュールに透過API (Transparent API, T-API) として分散・融合されている[20]。OpenCV 3.0にはOpenCLの相互運用を可能とするラッパーAPIも用意されており、OpenCL-C言語でカスタムカーネルを記述できるほか、OpenCL 1.2サポートを有効にしてOpenCVをビルドすることで、OpenCL 1.2対応のプラットフォームおよびデバイス上でOpenCL 1.2の機能(カーネルの分割コンパイル&リンクなど)を使えるようになる[21]。また、オプションとしてOpenCL 2.0もしくはAMD (HSA英語版) 拡張のShared Virtual Memoryもサポートしている[22]

各種言語バインディング(ラッパー)[編集]

公式に提供されているOpenCV APIとして、C/C++用インターフェイスのほか、Java、Python、MATLABバインディングが存在するが、そのほかにも非公式の各種言語向けのラッパーが存在する。

  • Java用ラッパー
    • JavaCV - OpenCV, FFmpeg, libdc1394, PGR FlyCapture, OpenKinect, videoInput, ARToolKitPlus のラッパー。バージョン1.0でOpenCV 3.0に対応。GPL v2ライセンスとApacheライセンスに対応。

関連項目[編集]

参照[編集]

[ヘルプ]