【Python】画像の読み込みと切り取り

 

こんにちは。のっくんです。

 

今日の記事では、Pythonで画像を読み込んで表示したり切り取る方法を紹介するよ。

 

ネコ
おお!ついにこのブログも画像を取り扱うようになるのね。画像処理って難しそうだけど大丈夫かな。
のっくん
難しく聞こえるけど、Pythonには画像を処理するOpenCVっていう便利なライブラリがあるんだよ。5〜10行のコードで実装できるんだ。

 

開発環境
・Python3.6
・Jupyter Notebook

 

OpenCVのインストール

 

まずは画像を処理するためのライブラリOpenCVをインストールします。

 

Anacondaにはないみたいなのでpipを使ってインストールします。

 

 

画像をダウンロードしてOpenCVで読み込む

 

Jupyter Notebookを開いて、以下のコードを実行します。

 

 

requestというライブラリを使って画像ファイルをダウンロードしtest.pngという名前で保存します。

 

保存したファイルをimreadを使って読み込みます。実行して以下のように0-255の配列が表示されれば正しく動作しています。

 

 

ネコ
この数値列は何を意味しているの〜〜?
のっくん
これは画像のカラーデータを表しているんだよ。1ピクセルの中に入っているカラーデータがBGR、つまり(青、緑、赤)の順番で並んでいるんだ。
次は、matplotlibを使って画像をJupyterNotebook上に表示してみます。

 

画像をJupyterNotebookに表示する

 

Jupyter Notebook上に画像を表示するには、matplotlibというライブラリを使います。Anacondaで検索すると見つかりますのでインストールしておいて下さい。

 

次にJupyter Notebookでmatplotlibをインラインで利用する宣言をします。先頭で以下のコードを入力、実行して下さい。

 

 

続いて表示するためのコードを書きます。

 

 

cvtColor(img, cv2.COLOR_BGR2RGB)では、カラーデータの順番をBGRからRGBに変換しています。これが無いと赤と青が反転して表示されます。

 

 

実行すると、こんな感じで画像が表示されました。

 

・OpenCVは画像処理するライブラリ。カラーデータはBGRの順番で格納されている。

・matplotlibは図やグラフを表示するためのライブラリ。カラーデータはRGBの順番で格納されている。

・画像データを受け渡しする際には、cvtColorを使って変換する必要がある。

 

画像の切り取り

 

次に画像の切り取りです。先ほどの画像のやき鳥の「き」の部分だけ切り取ってみます。

 

 

「き」の部分に当たる座標はどこでしょう。y軸は上から下に向かって数値が増えるようになっています。y軸は200〜450、x軸は100〜250と言ったところでしょうか。

 

Pythonのリストのスライスを利用して、配列[y1:y2,x1:x2]の書式で画像を切り取ります。

 

 

 

うまくいきましたね。

 

参考

「PythonによるAI・機械学習・深層学習アプリのつくり方」、ソシム、2018年6月

ABOUTこの記事をかいた人

のっくん

理系院卒で大企業の研究所に就職。 趣味はプログラミング、レアジョブ英会話、筋トレ、旅行。 Twitter:@yamagablog