Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
OpenCVとは
OpenCV(Open Source Computer Vision Library)は、画像処理やコンピュータビジョンを簡単に利用できるオープンソースライブラリです。Intelによって開発され、現在はオープンソースとして広く利用されています。OpenCVの主な特徴は以下のとおりです。
- 多言語対応
- Python、C++、Java、Androidなど、さまざまなプログラミング言語で利用できます。
- 豊富な機能
- 画像処理(フィルタリング、エッジ検出、変換など)
- 物体検出(顔検出、車両検出など)
- 動作解析(動体追跡、光学フローなど)
- 機械学習(分類、クラスタリングなど)
- リアルタイム処理
- 高速なアルゴリズムを提供し、リアルタイムでの画像処理が可能です。
本ページでは、PythonでOpenCVを扱う方法を解説します。
解説動画
本ページの内容は以下動画でも解説していますので、併せてご活用ください。
必要な予備知識と環境構築
- 画像処理とOpenCVを学ぶメリット
- デジタル画像の構造
- 標本化(サンプリング)
- 量子化
- ラスタ走査と二次元配列走査
- NumPy配列の扱い方
Python版OpenCVのインストール方法(Windows編) - Python版OpenCVのインストール方法(Mac編)
画像データの基本操作
- 画像ファイルを読み込む(cv2.imread)
- 画像ファイルを書き込む(cv2.imwrite)
- 画像をウィンドウに表示(cv2.imshow)
- 画像の高さ・幅・チャンネル数・画素数を取得
- グレースケール変換
- HSV色空間に変換(赤・緑・青色の検出)
- 窓画像(ROI)と部分処理
画像の濃度変換
- 画像のヒストグラムを計算してグラフ化(cv2.calcHist)
- ヒストグラム平均化で見やすい画像に変換(cv2.equalizeHist)
- 線形濃度変換で画像を見やすくする(ヒストグラム拡張など)
- ガンマ補正で明るさ調整
- LUT(ルックアップテーブル)でガンマ補正・変換の高速化
- k平均法で画像の減色処理(cv2.kmeans)
画像の二値化
- 単純二値化処理(cv2.threshold)
- 適応的閾値処理で二値化(cv2.adaptiveThreshold)
- 大津の手法で二値化
- 二値画像を膨張収縮処理してノイズ除去
- 二値画像のブロブ解析(ラベリングして各ブロブの重心や面積などを計算)
- 最大面積のブロブ情報を取得
画像の変形(拡大・縮小・回転)
空間フィルタリング
- はじめに
- 平滑化(ノイズ除去)
- 輪郭検出(エッジ抽出)
- その他
動画ファイルとWebカメラ映像の処理
移動物体の検出・追跡
- 背景間差分で物体追跡
- フレーム間差分で物体追跡
- カラートラッキング①移動物体の検知
- カラートラッキング②移動物体の追跡
- カラートラッキング③振り子の運動を測定
- オプティカルフローで物体追跡
- パーティクルフィルタで物体追跡
パターン認識(機械学習、ディープラーニング)
- テンプレートマッチング
- Cascade型識別器で顔検出
- SVM(サポートベクタマシン)で画像分類①手書き数字画像を分類
- SVM(サポートベクタマシン)で画像分類②HoG特徴量で画像分類
- ニューラルネットワークの構築
- DNN
特徴点のマッチング
- SIFT
- SURF
- ORB
- 位相限定相関法