ライブラリとして組み込んだOpenCVを使って画像処理を色々と試してみましょう
OpenCVのインストールについてはこちらの記事を参照ください
OpenCVは元々Intelで開発されていたオープンソースのコンピュータビジョンライブラリです
フィルター処理や物体認識をはじめとした、さまざまな機能を持ったライブラリです
ここでは画像の向きを変えたり、エッジ検出する例を示します
OpenCVではcv2.imreadで画像ファイルを読み込みます
imgという変数に画像ファイルを読み込みました
plt.axis(“off”)でグラフの軸目盛を非表示にします
plt.show()で描画します(最初に%matplotlib inlineと書くとplt.showは省略できます)
import matplotlib.pyplot as plt import cv2 img = cv2.imread("Lenna.bmp") plt.axis("off") plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.show()
以下のようにコードを書くと表示される写真の色がおかしくなります
コードとしてはこちらの方がシンプルに見えますが、
元ファイルと色が違うのはOpenCVのカラーデータがBGR(青緑赤)でmatplotlibの表示はRGB(赤緑青)と色の配列が逆になっているからです
そのためOpenCVの色空間を変換するcvtColor()関数でCOLOR_BGR2RGBを使うことで
入力画像と表示画像の色の配列を合わせ、元ファイルと同じ色で表示することができます
人の肌の色だとあまりに不自然なので気づきますが、
その他の画像であれば気づきにくい場合があるので要注意です
下の画像の色が元ファイルの色ですが上の色でもそれほど違和感ありません
flipという関数で表示する画像の向きを変えることができます
第二引数を0,1,-1とすることで上下反転、左右反転、上下左右反転した画像を表示します
flip_image = cv2.flip(img, 0) plt.axis("off") plt.imshow(cv2.cvtColor(flip_image, cv2.COLOR_BGR2RGB)) plt.show()
フィルタ処理を行うことで画像のエッジ検出する例を示します
ラプラシアンフィルタ、ソーベルフィルタ、カーニーフィルタでそれぞれ画像のエッジを抽出しています
これらの関数をひとつひとつこのように使うことは少ないかもしれませんが、
検査対象の画像に前処理として入れることで、深層学習や検出精度が向上するということはよくあります
深層学習を実践する場合、コードをコピペしてすでに用意されたデータセットを使う場合は
簡単に試せますが、自分のデータセットでテストしようとしたり自分でモデルの精度を改善しようとした途端に内容を深く理解しないと前に進めないことがあります
このブログではそうした困りごとに対応する方法を示していけたらと考えています
コメント