【Django】画像をグレー変換する

 

この記事では、Djangoで画像をグレー変換するwebアプリを作ってみたので紹介します。

 

 

ネットとかを調べると、画像をアップロードしてテンプレートに表示する方法とかはあるんですが、アップした画像を画像処理する方法があんまり無いような感じだったので紹介します。

 

画像処理にはopencvと言うライブラリを使っています。グレースケールだけでなく様々な画像処理ができる強力なライブラリです。

 

実行環境

・Python 3.6
・Django 2.1

 

 

使用するライブラリ

 

pillowはImageFileldを使うためのライブラリ、opencv-pythonはpythonでopencvを使うためのライブラリです。両方ともpipでインストールできますのでしておきましょう。

 

モデル

 

画像はImageFieldを使って管理します。

 

models.py

 

変換前の画像も残しておきたいので、元画像をphoto, グレー画像をgrayと言う名前で2種類のフィールドを宣言しておきます。

 

photoの方はユーザがブラウザからアップロード、grayはボタンが押されたらビュー内で画像処理して自動的に保存するように作りたいと思います。

 

アップロード機能の作り方は以下の記事にそれぞれまとめてあります。

 

https://ymgsapo.com/file-upload/

 

モデルを作成したら、以下のコマンドでマイグレーションします。

 

 

ビュー

 

views.py

 

主な処理は以下の通り。

 

  1. ボタンが押されたら、元画像の保存場所を取得する
  2. gray関数内で元画像を読み込み、グレースケール変換する
  3. “gray.jpg”と言う名前でグレー画像を保存する
  4. グレー画像の場所を指定、save()でレコードの更新を行う

 

opencvの関数で画像を読み込んでグレースケール処理した後に、CRUDの1つである「レコードの更新」を行っています。

 

プロジェクトのルートパスはsettings.pyをインポートして、その中のBASE_URLを使っています。

 

なお、今回はグレー画像の名前を「gray.jpg」と固定していますが、本当はアップロードした「元画像の名前_gray.jpg」とかにした方が良いです。他のアップした画像と被ってしまいますので。

 

テンプレート

 

edit.html

 

imgタグで画像を表示するようにしています。サイズを縦横10%に縮小しています。

 

ABOUTこの記事をかいた人

のっくん

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