Python版OpenCV入門 サンプル集

この記事では、Python+OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説します。

Pythonとは

Pythonは欧米で人気なスクリプト言語です。
初心者にも扱いやすい言語で短くて読みやすいコードを書くことが出来ます。
数値計算や最近流行りの機械学習、画像処理にも強いという特徴があります。
本ページでは、PythonとOpenCVを用いた画像処理プログラミングについてまとめました。

※「Pythonの基礎」や「画像処理の基礎」については下記事で解説しています。

関連記事
画像処理の原理はこちら 【画像処理入門】アルゴリズム&プログラミング
Pythonの基礎はこちら Python入門 サンプル集

Python・OpenCVの環境構築

PythonとOpenCVの環境構築について以下にまとめています。

項目
Python環境構築 Windows環境・・・Python環境を構築する方法
②Linux環境(Ubuntu, Rasbian)・・・標準搭載されているので環境構築不要
③Mac環境・・・(´∀`) <・・・
OpenCV環境構築 【Windows編】Python3にOpenCV3をインストール

補足

Python版OpenCVを使えるようにするには、「Python環境の構築」「OpenCVの導入」の2つを行う必要があります。
やり方がいくつもありますが、WIndows環境では次のやり方がおすすめです。

詳細記事
手順①Python環境の構築 WinPythonでPython環境構築
手順②OpenCVの導入 pipでWinPythonにOpenCVをインストール

ファイル入出力

Python版OpenCVでは読み込んだ画像データはNumPy配列(ndarray)に格納されます。
そのため、ある程度NumPy配列の操作方法を知っておく必要があります。(全然難しくありません)
詳細は「【NumPy入門】基礎的な扱い方」をご覧ください。

項目
画像データの読み込み 画像ファイルの読込, 画像ファイルの書込
各種情報の取得 幅・高さ・ch数・画素数の取得
画像の切り出し 窓画像(部分画像)

色空間の変換

項目
変換 RGB→GRAY, RGB→HSV

ヒストグラム・濃度変換

項目
基礎 ヒストグラム作成
変換 線形濃度変換, 非線形濃度変換(ガンマ補正), ヒストグラム平均化
減色 K平均法

空間フィルタリング

項目
平滑化 平均値, ガウシアン, メディアン
輪郭検出 一次微分, Prewitt, Sobel, Laplacian, Emboss, LoG, Canny
処理の高速化 積分画像, DoG, DoM, XDoG
参考 【Numba】NumPy+for文の高速化

周波数フィルタリング

項目
概要 画像処理におけるフーリエ変換
フーリエ変換 一次元FFT, 二次元FFT, スペクトル強度
フィルタリング ローパスフィルタ, ハイパスフィルタ

二値画像

項目
二値化処理 単純二値化, 適応的二値化, 大津の二値化
膨張収縮 膨張収縮処理
直線検出 ハフ変換(古典的), ハフ変換(確率的)
ブロブ解析 ブロブ情報解析, 面積最大のブロブ解析, ラべリング, 重心

幾何学的変換

画像の拡大・縮小・移動・回転など。

項目
補間法 最近傍補間法, バイリニア補間法, バイキュービック補間法
回転 アフィン変換
その他 ユークリッド変換, 相似変換

パターン認識(類似度評価, 識別器・分類器, 機械学習)

項目
テンプレート探索 SSD, SAD, NCC, ZNCC
HL Cascade 顔検出
LBP Cascade アニメ顔検出
HoG SVM 人検出, 識別器の作成
NN ニューラルネットワーク
特徴点 SIFT, SURF, 位相限定相関法
機械学習 【機械学習入門】アルゴリズム&プログラミング

動画像処理

項目
動画の取得 動画ファイルの読み込み・再生
動体検出 背景差分法, フレーム差分法, カラートラッキング
動体追跡 MeanShift, Camshift, オプティカルフロー(LK法), パーティクルフィルタ

応用例・その他

応用例

項目
画像処理 漫画化, アニメ絵化, 顔にモザイク
動画処理 漫画化, アニメ絵化
監視カメラ フレーム差分で不審者の検知
物理実験 振り子の観測

その他

項目
関連記事 【Python】画像処理プログラミング入門, 【画像処理入門】アルゴリズム&プログラミング
お借りした画像 プログラミング生放送(プロ生ちゃん)
便利ツール Python Cloud IDE, Online OpenCV IDE

シェア&フォローお願いします!