読者様、明けましておめでとうございます。久しぶりです。今回のブログは最近学んでいる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( '垂直画像の位置' )
こちらは画像変更の他の例です: