実践 コンピュータービジョン: 1章補足

O'Reillyの『実践 コンピュータービジョン』(原題: Programming Computer Vision with Python)という書籍を購入したので読み始めてみました。どうやらこの本は7年前に出た本なのでPythonのバージョンが2であったり、ライブラリの使い方が微妙に変わっているようです。また、もともとの読者層にプログラミング言語や数学に慣れ親しんでいることが前提のようなので、最初の章から丁寧な説明は期待できないので補足的な意味合いの投稿を書いてみようと思います。

NOTE

この投稿では画像検索でダウンロードした画像を使用しています。画像の著作権はそれぞれの作者に帰属します。

# 1.2 Matplotlib

OpenCVの解説が中心かと期待していましたが、この書籍は主にPILとMatplotlibが中心のようです。インストールするライブラリは以前も触れましたが、PILはPillowで代替できます。続いて1.2.1のコードを実行すると以下のようなメッセージが表示されました:

UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
  show()

OpenCVのようにインストールするだけでウインドウが表示されなかったので以下のコマンドでTKをインストールします:

sudo apt install python3-tk

これで無事画像が表示されました。

点の表示と線を引く

# 1.2.2 画像の等高線とヒストグラム

この節で出てきたconvertという関数が気になりました:

im = array(Image.open('empire.jpg').convert('L'))

ここに指定した'L'という文字列を調べてみると、ルミナンス(輝度)のLのようで、グレースケールに変換するときに指定するときに用いるモードのようでした。

画像の比較

左から元の画像、真ん中がconvert('L')で変換した画像、右側が等高線に変換した画像です。convertしない場合はMatplotlibにあるcontour関数でエラーになっていたようなのでここもそこまで深く考える必要はなかったかもしれません。

後で読み直してから気づいたのですが、この関数については一番最初のページについて言及されていました。

# 1.3.2 グレーレベルの変換

グレーレベル画像

1.2.2で生成した画像をMatplotlibで表示すると、全体に緑かかった画像が表示されていましたがこのままでは保存できませんでした。convert('RGB')を使うと画像を保存できるようになるので試してみました。こちらも書籍のコードをそのまま流用しているので左がもとのグレー画像に対して反転、100~200の範囲、2乗の画像です。画像にして出力すると理解が深まりやすい気がします。

同じような勢いで読み進めていたのですが、これ以降は難解なので軽く目を通しておく程度に留めておきました。

# 参考にしたページ

https://github.com/tctianchi/pyvenn/issues/3

https://stackoverflow.com/questions/52307290/what-is-the-difference-between-images-in-p-and-l-mode-in-pil

https://stackoverflow.com/questions/16720682/pil-cannot-write-mode-f-to-jpeg