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