OpenCVで画像ファイルを読み書き
画像をNumPy配列ndarray
として読み込めればOpenCVは必要なく、例えば、Pillowを使うことも可能
ここでは画素(ピクセル)ごとの単純な差分を考える。圧縮画像などの画質を評価したい場合はPSNR(Peak signal-to-noise ratio、ピーク信号対雑音比)といった指標が使われる
np.array_equal()
で配列の要素、すなわち、画像の画素値がすべて等しいかを判定
差分の絶対値
cv2.imread()
で読み込んだndarray
のデータ型は符号なし8ビット整数unit8
なので、そのままだとマイナスの値を扱えない。astype()
で符号ありの整数int
に変換する。
差分を画像として保存したい場合は負の値があるとエラーになるためnp.abs()
で絶対値をとる。
⇑
⇢根本的にあまりわかっていませんが人間の目で見るという感覚でなく画素数(ピクセル)で判断し マイナスの値を扱うためastype()
で符号ありの整数int
に変換
差分を画像として保存したい場合は負の値があるとエラーになるためnp.abs()
で絶対値を設定
ここではカラー画像(三次元配列)の差分を取得しているが、グレースケール画像(二次元配列)の差分もやり方は同様。
差分が生じている座標を取得
差分が生じている位置を、二値化の例のように画像で確認するのではなく正確な座標として取得するには、np.where()
を使う。
NumPy(ndarray
)での画像処理の例、
- 画素値の取得と変更
- 単色化と画像の結合(連結)
- ネガポジ反転(画素値の逆転)
- 減色処理
- 二値化処理
- ガンマ補正(四則演算)
- スライスでトリミング
- スライスや関数で分割
- スライスで貼り付け
- アルファブレンドとマスク処理
- 回転と上下左右反転
- 2枚の画像の比較
画像の読み込みや保存、リサイズや回転などの簡単な処理はPillowのみで実行可能。
色(チャンネル)の並びはRGB(赤、緑、青)の順。
OpenCVのcv2.imread()
で読み込んだ場合(BGR)
convert('L')
で白黒(グレースケール)画像にしてから変換すると二次元のndarray
として読み込まれる。
np.asarray()
でも同様にndarray
が得られる
しかし、
np.array()
は書き換え可能なndarray
を返す
np.asarray()
は書き換え禁止のndarray
を返す
↓画像認識でできそう? opencvの精度はpyAutoGuiと比べてどうなんでしょう・・
OPENCV
フィルター処理
行列演算
オブジェクト追跡(Object Tracking)
領域分割(Segmentation)
カメラキャリブレーション(Calibration)
特徴点抽出
物体認識(Object recognition)
機械学習(Machine learning)
パノラマ合成(Stitching)
コンピュテーショナルフォトグラフィ(Computational Photography)
GUI(ウィンドウ表示、画像ファイル、動画ファイルの入出力、カメラキャプチャ)