Knowledge Base Wiki

Search for LIMS content across all our Wiki Knowledge Bases.

Type a search term to find related articles by LIMS subject matter experts gathered from the most trusted and dynamic collaboration tools in the laboratory informatics industry.

OpenCV
開発元 インテルWillow GarageItseez
最新版
4.10.0 / 2024年6月3日 (6か月前) (2024-06-03)[1]
リポジトリ ウィキデータを編集
プログラミング
言語
C++JavaPython、他[2]
対応OS Windows, Linux, FreeBSD, macOS, Android, iOS
プラットフォーム クロスプラットフォーム
種別 ライブラリ
ライセンス OpenCV 4.4以前: 三条項BSDライセンス / OpenCV 4.5以降: Apache v2[3]
公式サイト opencv.org
テンプレートを表示

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

概要

画像処理・画像解析および機械学習等の機能を持つC++JavaPythonMATLAB用ライブラリ[8]。様々なプラットフォームすなわち複数のオペレーティングシステム (OS) やCPUアーキテクチャに対応するクロスプラットフォームなライブラリであり、macOSFreeBSD等全てのPOSIXに準拠したUnix系OSLinuxWindowsAndroidiOS等をサポートしている[9]。Androidへの移植は2010年に始まり、バージョン2.3で正式に利用可能となった。iOS対応の完全な統合は2012年にリリースされた2.4.2で利用可能となった。

当初からPowerPC系プロセッサなどにも対応していたものの、もともとインテルが開発していたこともあって、x86系プロセッサへの対応と最適化が主流だった。しかし、ARMアーキテクチャを採用したモバイルデバイスの台頭に伴い、ARM系プロセッサへの対応と最適化にも取り組まれている[10]

歴史

1999年にプロジェクト開始。最初のアルファ版が公開されたのは、国際会議CVPR 2000 (IEEE Conference on Computer Vision and Pattern Recognition 2000) である。2001年から2005年の間に5つのベータ版がリリースされた。2006年の後半にバージョン1.0の正式版がリリースされた[11][12]。クロスプラットフォームを意識した設計となっており、当初はC言語で書かれていた。このことが移植性を高めることにつながった[9][注釈 1]

2008年にWillow Garageによるサポートを受け、開発状況が再び活発になった。2009年10月に2回目のメジャーバージョンアップが実施され、2.0版がリリースされた。従来のC API(C言語関数形式のインターフェイス)に加えて、C++ APIが導入された[9]。OpenCV 2.4.4以降ではJavaが公式にサポートされている[13]。OpenCV 2.x系列は2018年2月に2.4.13.6がリリースされた後、メンテナンスされていない[1][14][15][16]

2015年6月に3回目のメジャーバージョンアップとしてOpenCV 3.0が正式リリースされた。OpenCV 3.0では従来のC APIはレガシーAPI扱いとなりメンテナンスが終了しているため、代わりにC++ APIを使うことが推奨されている[17]。2015年12月にリリースされたOpenCV 3.1では、Google Summer of Code 2015の成果物の取り込みなど、多数の機能が追加されている[18]。OpenCV 3.x系列は、2021年10月にリリースされた3.4.16の公式ビルド済みバイナリが提供されており[1]、また2023年6月にバグ修正を含む3.4系列の最終版として3.4.20がリリースされた[19]

2018年11月にOpenCV 4.0がリリースされた[20]C++11規格準拠コンパイラが必須となり、またC APIは廃止された。Graph API (G-API) やQRコード検出機能などが追加された。DNNモジュールにおいて、OpenCLが使えないプラットフォーム向けに、Vulkanバックエンドの実験的サポートが追加された。

2024年1月現在、4.x系列の開発が続けられている。またOpenCV 5の開発について、2023年10月に資金調達のためのクラウドファンディングが立ち上げられた[21]

機能

実装分野は次の通り。

OpenCVの機能はいくつかのライブラリモジュールに分割して実装されている。モノリシックな1ファイル(worldモジュール)にビルドすることも可能であるが[22]、通常は必要なものだけ個別のモジュールとしてビルドする。

ビデオ入出力モジュールではWebカメラに代表されるUVCデバイスを扱うことができる。モジュールをビルドする際に、サポートするバックエンドとしてFFmpegVideo4Linux英語版Video for WindowsDirectShowMedia FoundationOpenNI英語版などを選択することができる[23][24]

OpenCV 2.1[25]SSE拡張命令を使用した最適化コードが実装されている。OpenCV 2.4.3でIntel TBBOpenMP、AppleのGCD英語版、Windowsの同時実行ランタイムなどを利用した並列化cv::parallel_forが実装されている[26]。OpenCV 3.0でIntel IPPのサブセットがIPPCVとして寄贈され、デフォルトで使用されるようになった[27]。OpenCV 3.1ではクロスプラットフォームなSIMDアクセラレーションのためのUniversal Intrinsicsが導入され[28]、従来からのSSE (x86) 命令のサポートに加え、AVX (x86) 命令やNEON (ARM) 命令のサポートも加わっている。OpenCV 3.3.1ではPPC64英語版(64ビットPowerPC)アーキテクチャへの最適化もVSX命令への対応によって実現されている[29]

OpenCV 2.2[30]CUDAを使ったアクセラレータであるgpuモジュール、OpenCV 2.4.3[31]OpenCLを使ったアクセラレータであるoclモジュールが追加された。gpuモジュールを有効にするためには、OpenCVをWITH_CUDA=ON構成でビルドする必要がある[32]。また、oclモジュールを有効にするためには、OpenCVをWITH_OPENCL=ON構成でビルドする必要がある[33]。なお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) として分散・融合されている[34][35]。OpenCV 3.0にはOpenCLの相互運用を可能とするラッパーAPIも用意されており、OpenCL-C言語でカスタムカーネルを記述できるほか、OpenCL 1.2サポートを有効にしてOpenCVをビルドすることで、OpenCL 1.2対応のプラットフォームおよびデバイス上でOpenCL 1.2の機能(カーネルの分割コンパイル&リンクなど)を使えるようになる[36]。また、オプションとしてOpenCL 2.0もしくはAMD (HSA) 拡張のShared Virtual Memoryもサポートしている[37]

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

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

OpenCV 4.4では、Objective-CSwift用のバインディングが公式に取り込まれた[38]

脚注

注釈

  1. ^ C++の最初の国際標準規格「ISO/IEC 14882:1998」通称C++98が制定されたのは1998年のことであり、2000年代初頭はまだ規格に完全準拠した処理系が少なく、移植性の高いコードをC++で記述するのは困難だった。また、ロボティクスのような組み込み環境向けのソフトウェア開発ではCを使うことはできるものの、C++は使えないことも多かった。

出典

  1. ^ a b c Releases | opencv.org
  2. ^ GitHub - opencv/opencv: Open Source Computer Vision Library
  3. ^ License - OpenCV
  4. ^ 橋本直「特集 拡張現実感 (AR) 基礎3: 開発用ツール」『情報処理』第51巻第4号、情報処理学会、2010年4月、382ページ。 
  5. ^ 第1回 OpenCVとは? 最新3.0の新機能概要とモジュール構成:OpenCV入門【3.0対応】(1/2 ページ)”. @IT. 2023年5月3日閲覧。
  6. ^ Intel Acquires Computer Vision for IOT, Automotive | Intel Newsroom
  7. ^ Intel acquires Itseez | opencv.org
  8. ^ About | opencv.org
  9. ^ a b c Platforms - OpenCV
  10. ^ ARM - OpenCV
  11. ^ SourceForge.net: Open Computer Vision Library, Internet Archive
  12. ^ ChangeLog_v10-v21#1.0 · opencv/opencv Wiki · GitHub
  13. ^ Introduction to Java Development — OpenCV 2.4.13.0 documentation
  14. ^ OpenCV - Browse /opencv-win at SourceForge.net
  15. ^ Tags · opencv/opencv | GitHub
  16. ^ Releases · opencv/opencv | GitHub
  17. ^ OpenCV 3.0 Latest news and the Roadmap, Kirill Kornyakov, Itseez, ICVS 2013
  18. ^ OpenCV 3.1 - OpenCV
  19. ^ ChangeLog#version:3.4.20 · opencv/opencv Wiki · GitHub
  20. ^ ChangeLog#version:4.0.0 · opencv/opencv Wiki · GitHub
  21. ^ Where Is OpenCV 5? A Call To Keep OpenCV Free To All - OpenCV
  22. ^ 第4回 初めてのOpenCV開発 ― Visual Studio/CMake/NuGetでプロジェクト作成【OpenCV 3.0/3.1】:OpenCV入門【3.0対応】(1/3 ページ) - @IT
  23. ^ OpenCV: Video I/O with OpenCV Overview”. docs.opencv.org. 2021年1月7日閲覧。
  24. ^ 第8回 初めてのOpenCV開発 ― CMakeを使ったOpenCVのカスタマイズ【OpenCV 3.1.0】:OpenCV入門【3.0対応】 - @IT
  25. ^ OpenCV2.0 から OpenCV2.1 の変更点(ChangeLog) | OpenCV.jp
  26. ^ ChangeLog#version:2.4.3 · opencv/opencv Wiki | GitHub
  27. ^ OpenCV 3.0 - OpenCV
  28. ^ OpenCV: Universal intrinsics
  29. ^ ChangeLog#version:3.3.1 · opencv/opencv Wiki · GitHub
  30. ^ OpenCV 2.2 Released - ROS robotics news
  31. ^ OpenCV 2.4.3 released - OpenCV
  32. ^ GPU Module Introduction — OpenCV 2.4.11.0 documentation
  33. ^ OpenCL Module Introduction — OpenCV 2.4.11.0 documentation
  34. ^ OpenCV: OpenCV modules
  35. ^ OpenCL - OpenCV
  36. ^ opencv/opencl_core.hpp at 3.0.0 · opencv/opencv | GitHub
  37. ^ opencv/ocl.cpp at 3.0.0 · opencv/opencv | GitHub
  38. ^ ChangeLog#version:4.4.0 · opencv/opencv Wiki · GitHub

関連項目

外部リンク