OpenCV
OpenCVは、画像処理とコンピュータビジョンのためのオープンソースライブラリである。クロスプラットフォームで動作し、研究から産業用途まで幅広く用いられる。行列型の画像表現、豊富な前処理、特徴抽出、幾何学、学習・推論、可視化まで揃い、リアルタイム処理を前提とした最適化が施されている点が特徴である。
基本概念
OpenCVは画像を多次元配列(Mat)として扱い、8bit・16bit・32bit浮動小数などの型とチャネル(GRAY、BGR、RGBAなど)を組み合わせて表現する。座標は左上原点、右方向がx、下方向がyである。色空間変換、正規化、ROIの切り出しはパイプラインの基礎であり、以降の認識精度を左右する。
主な機能
- OpenCVの画像前処理:平滑化、エッジ検出、二値化、モルフォロジーでノイズを抑え特徴を強調する。
- 幾何変換:リサイズ、回転、アフィン・射影変換、レクティファイにより形状・視点の差を補正する。
- 特徴量とマッチング:ORBやAKAZEなどの局所特徴、HOGなどのグローバル特徴で対応付けを行う。
- 運動・トラッキング:オプティカルフロー、Kalmanフィルタで物体追跡や動き推定を実現する。
- カメラキャリブレーション:内部・外部パラメータ推定、歪み補正、ステレオ視による距離推定。
- 機械学習・DNN:クラシカルMLに加えdnnモジュールで物体検出やセグメンテーションの推論を行う。
- 写真・動画処理:露光補正、ノイズ低減、ブレ補正、背景差分、コーデック入出力。
モジュール構成
OpenCVはcore(基本演算)、imgproc(画像処理)、highgui(表示)、videoio(入出力)、video(動き解析)、calib3d(幾何・キャリブレーション)、features2d(特徴)、objdetect(検出)、photo(画像修復)、ml(機械学習)、flann(高速最近傍)、dnn(ディープ推論)、gapi(グラフAPI)などから成る。用途に応じて必要モジュールのみリンクすればフットプリントを抑えられる。
拡張(contrib)
contribにはxfeatures2d、ximgproc、aruco、optflow、faceなどが含まれ、研究・試作段階のアルゴリズムや実用的な周辺機能を提供する。商用化前の検討や評価に適する。
代表的な用途
- OpenCVによる外観検査:キズ、欠け、寸法偏差の検出で製造品質を支える。
- 自動運転・ADAS:レーン検出、標識・歩行者検出、前方物体追跡など。
- ロボティクス:SLAM、ピッキング、マーカ追跡、位置姿勢推定。
- 医用画像・計測:セグメンテーション、特徴抽出、定量評価。
- セキュリティ・リテール:入退場カウント、顔・人体検出、動線解析。
- AR/VR:Arucoマーカや特徴点追跡を用いた重畳表示と位置合わせ。
Python/C++エコシステム
OpenCVはC++実装を基盤にPythonバインディングを提供する。PythonではNumPy配列と相互運用でき、学習系(scikit-learn、PyTorch、TensorFlow)や可視化(Matplotlib)と組み合わせた迅速な試作が可能である。C++は組込み・高性能用途で選ばれ、リアルタイム要件に応えやすい。
性能最適化の要点
OpenCVはSIMDやマルチスレッド最適化を内包し、OpenCL(UMat)やCUDA(GpuMat)によるGPU加速にも対応する。コピー回数の最小化、色空間変換の集約、カーネルサイズ・データ型の見直し、I/Oボトルネックの解消が実効性能を左右する。前処理・推論・描画をできるだけ同一デバイスで完結させると良い。
画像処理パイプラインの設計
- OpenCVで入力:カメラ・ファイルからの取り込み、色空間の統一。
- 前処理:正規化、平滑化、シャープ化、照明むら補正、背景差分。
- 特徴抽出:エッジ、輪郭、コーナ、記述子、テクスチャ。
- 認識:クラシカルMLまたはdnnで分類・検出・セグメンテーション。
- 後処理・計測:ノイズ除去、スケルトン化、幾何測定、レポート生成。
カメラキャリブレーションと幾何学
OpenCVはピンホールモデルと歪みモデルに基づき、チェスボード等のパターンから内部・外部パラメータを推定する。エピポーラ幾何によりFundamental/Essential行列を推定し、ステレオ整列や三角測量で3D復元を行う。産業計測では画素ピッチと外部基準を用いた寸法校正が重要である。
DNNとの連携
OpenCVのdnnはONNX等のモデルを読み込み、CPU/GPUバックエンドで推論する。前後処理(リサイズ、正規化、NMS)の組み立てが容易で、既存の画像処理パイプラインに検出・認識を無理なく統合できる。軽量モデルを選べばエッジ端末でもリアルタイムが狙える。
信頼性と評価
OpenCVを用いたシステムでは、データ分布の偏り対策、環境変動(照度、姿勢、速度)のロバスト化、ドメインシフト検証が肝要である。IoU、F1、mAP、処理遅延、スループットなどの指標を定義し、テストベンチで再現性を確保することで運用品質を担保できる。
ライセンスと導入
ライセンスはBSD系で商用利用に適する。パッケージ管理(Pythonのpip、OSのパッケージ、ソースビルド)を用途に応じて使い分ける。長期運用ではバージョン固定、依存関係の追跡、モデル・重み・設定の一元管理が保守性を高める。