【Sample5】平滑化処理
まずは画像処理の基本の平滑化を試します。
平滑化では、ガウシアン(Gaussian)やそれに似たカーネル関数でコンボリューション(畳み込み)処理すること
で効果的に画像の情報量を減らします。


<プログラム説明>
27行目の cv::imshow() は前例の使い方と同じですが、52行目の cv::imshow() の呼び出しの為、もう1つの
画像用のデータ領域を確保しています。それは、cv::Mat を使います。
出力用の行列として out をインスタンス化します。
これで実行中の画像をリサイズしたり再確保、開放などを必要に応じて自動で行ってくれます。
(47行、48行目)
out を使って2回連続してcv::GaussianBlur() を呼び出しています。
最初の呼び出し:入力画像が、5 x 5 の Gaussian コンボリーションフィルタで平滑化処理され out に書き出され
ます。
Gaussian カーネルのサイズは、奇数である必要があります。これは Gaussian カーネル(cv::Size(5,5) )は、
その領域の中央のピクセルで計算されるからです。
次の呼び出し:一時的な記憶領域が関数内部で割り当てられるので、out を入力と出力の両方に使う事ができます
2回平滑化した結果の画像を表示したらユーザーのキー入力待ち、なにか入力されると終了します。
確保されたデータはスコープの外に出たとき開放されます。
【結果画像】
左が原画像、右が平滑化された画像です。

【Sample6】平滑化+ダウンサイジング
今回の例は、Gaussian 平滑化により画像を2分の1にダウンサイジングする関数を使います。
一般的にサンプリングすると高周波数が画像に入り込みます。それを防止する方法の一種が今回の処理 です。
Gaussian による平滑化とダウンサイジングを cv::pyrDown() 関数で行うことができます。


結果画像です。 左原画、右ダウンサイジング画像です。

【Sample7】Canny(エッジ検出器)
この例は、Canny エッジ検出器の cv::Canny() を用いてみます。
エッジ検出器は入力画像と同じサイズの画像を生成しますが、書き出される画像はシングルチャンネルしか必要と
しません。
その為、最初に cv::cvtColor() を使ってグレースケールのシングルチャンネルの画像に変換します。
このとき BGR の画像をグレースケールに変換する cv::COLOR_BGR2GRAY フラグを用います。


結果画像 左がグレースケール化した画像、 右側がさらにエッジ検出した画像

【Sample8】オペレーターのつなぎ合わせ
今回は、画像を2回縮小して、その画像内のエッジを検出する例です。


結果画像 左画像はグレースケール画像、 右側画像は2回縮小後のエッジ検出画像


【Sample9】前例からピクセル値を読み出し書込みを行う。
画像処理部分は先ほどと同様で処理結果画像は同様なので諸略します。
ここでは、結果画像内からピクセル値を読み出したり書き出す方法を示します。



下記が処理結果後のピクセル情報を表示させたものです。
