PythonのPIL(Python Imaging Library)で画像を加工します

読者様、明けましておめでとうございます。久しぶりです。今回のブログは最近学んでいるPythonの進捗を記録します。現在私はPythonや他のプログラムで画像の認識や色々な変更をしたいです。

Pythonはオランダ出身のGuido Van Rossumで開発していて、1991年大衆に提供している、汎用なプログラムです。PIL(Python Imaging Library)はPythonに追加して、画像を自由自在に加工したり、変更が出来るの画像のデータベースです。

Pythonは色んなインストールする方法があります。私が選んでいる方はJetBrains PyCharm Community Editionです。PyCharmはチェコ共和国の会社:JetBrainsでPythonプログラミング言語をプログラミングし、分析するために開発したプラットフォ―ムです。こちらはJetBrains Pycharmのウェブサイトです:https://www.jetbrains.com/pycharm/

PyCharmをインストールした後に使用者はPythonでプログラミングをできますが、PIL画像データベースはまだ使いません。PILを使いたい場合はpipをパソコンのCommand Promptで使うは必要があります。以下はpipをパソコンで使える方法です。始めてPythonのインストール場所を見つけて、場所のアドレスをコピーします。後でWindowのControl Panelを開いて、システムへ行って、詳細設定(Advanced System Setting)へ入って、環境変数をクリックして、そして新しいPathを新規します。新しいWindowの中に変数値の中にPythonのインストールをする場所を入力します。その後Window Command Promptでpipが使えます。

以上の手続が終わったらCommand PromptでPipを使えます。現在Windows Command Promptを開いて、pip install Pillowを入力します。その時点でパソコンが自動的にPillowをインストールしています。その後PythonでPillowを使えます。

今まで私はPillowで画像の色や、解像度の変更をできます。例えば現在画像のRGB値に基づいて変更しました。以下のプログラムは上記の条件を実現します。#の後ろに文章は前にコードの説明です。

from PIL import Image #このコードはPILデータベースから、Imageをプログラム中にインポートします。

im = Image.open("画像の位置")#imの機能は画像を開きます。
rgb_im = im.convert('RGB') #im画像色のフォーマットはRGB(Red, Green, Blue)に変更します。
size = rgb_im.size #sizeはrgb_imの大きさを声明します。
im2 = Image.new('RGBA', size)#im2のフォーマットはRGBA(Red, Green, Blue, Alpha)、そして大きさは先に声明したsizeの同じく大きさです。

for x in range(size[0]):
    for y in range(size[1]):
        r,g,b = rgb_im.getpixel((x,y))#画像中にすべてのピクセルの色の資料をもらって、r, g, bに保存します。

        if (r >= 200) and (g <= 100) and (b <= 100):
            r = 255 - r#Redの値を反転します。
            g = 255 - g#Greenの値を反転します。
            b = 255 - b#Blueの値を反転します。

        else:
            r = 255#Redの値を255になります。
            g = 255#Greenの値を255になります。
            b = 255#Blueの値を255になって、色が白になります。

        im2.putpixel((x, y), (r, g, b, 0))#imのサイズをxとyの最大点になります。色をr, g, bの新しい値になります。

im2.save("新しいファイルの位置")#新しく変更された画像を保存します。

そして以下2枚写真は元の写真と上記プログラムの結果です。

他の結果は写真を合わして貼り絵。以下三つの画像はプログラミングと貼り絵です。

from PIL import Image

list_im = ['第一画像の位置', '第二画像の位置', '第三画像の位置']#配列の内容は三つの画像の位置
imgs    = [ Image.open(i) for i in list_im ]#imgsは配列中に三つの画像

# 以下のコードは一番小さい画像を選んで、他の画像のサイズは一番小さい画像サイズになります。
min_shape = sorted( [(np.sum(i.size), i.size ) for i in imgs])[0][1]
imgs_comb = np.hstack( (np.asarray( i.resize(min_shape) ) for i in imgs ) )

#横画像を出力します。
imgs_comb = Image.fromarray( imgs_comb)
imgs_comb.save( '横の画像の位置' )

# 垂直画像を出力します。
imgs_comb = np.vstack( (np.asarray( i.resize(min_shape) ) for i in imgs ) )
imgs_comb = Image.fromarray( imgs_comb)
imgs_comb.save( '垂直画像の位置' )

 

 

 

 

 

 

こちらは画像変更の他の例です:

Gamma Correction.
Equalize the Colors
Black and White
Image Blur
Image Posterization