TensorFlow,Kerasとか画像を扱うときに(それに限らずとも)、ちょっとNumpy状態の配列をちょっとだけ画像処理したいとか行列を整形したいとかってときがよくある.
いちいちPIL型の状態に変換して処理してもう一度Numpyに戻すのは面倒くさいので可能な限りnumpyの状態で操作したいってのがモチベ
グレー画像の行列を一段階深くする((W,H)から(W,H,1)にする)
読み込み方や準備の仕方によってはグレー画像の状態がshapeとしてWxHの形式になっていることがある.ただ(W,H,1)になってくれている方が扱いやすいことが多い.
画像を2値化する
画像の二値化はwhere関数で実現できる.一つ目に条件を記述して、二つ目の引数に最大値、三つ目の引数に最小値を入れるだけ.
ゼロ埋めしてサイズを変更する
面倒臭い方法でもいいならnumpy.zerosで0の行列を作って、元の配列にconcatするのでもよい.
画像の一部をトリミングする
画像の一部のみを切り出して新しい画像を作り直したいときは簡単にトリミングする方法がある.要素のインデックスを指定するだけ.
グレー画像を3チャンネルにする(グレー画像だけどカラー画像の状態)
見た目は変わらないけど、グレー画像をどうしても1チャンネルの状態ではなくて3チャンネルの状態にしたいときは以下のようにrepeat関数を用いて簡単に変換することができる.
特定の行と特定の列だけを抜き出す
画像の行列のうち、特定の行と特定の列の両方に含まれる要素を抜き出したいときは以下.いまいち使いたいときは少ないかもしれないけど.
赤や青の行列だけをグレー画像として抜き出す
カラー画像があった場合に、Rだけの行列とかGだけの行列とかを抜き出したいときはある.そんなときは以下のような形で行う.
おわりに
他のエッジ処理したいとかスムージングしたいときはScipy関係のライブラリが楽だしNumpy配列のままだし充実していると思う.