見出し画像

Python(基礎編:画像処理)

今日は画像処理を勉強します。画像処理で使うライブラリーで代表的なものに「Pillow」「NumPy」「OpenCV」があります。

・Pillow(PIL): 画像処理ライブラリ
・NumPy: 科学計算ライブラリ
・OpenCV: コンピュータビジョンライブラリ

今回は「Pillow」パイロウというものを勉強します。

Pillow(PIL)

画像9

Pillow(PIL)は画像処理ライブラリの1つで、Anacondaに含まれているので、設定に追加してimportすると使用可能。

「Pycharm」を使います。

画像1

新規プロジェクトを作成

画像10

ロケーションでフォルダー名を作って、作成ボタンを押す。

画像3

パッケージを追加する

画像11

設定からパッケージを追加する。

「ファイル」「設定」を押す。

画像2

「プロジェクト」「Pythonインタープリター」から「+」を選択する。

画像4

「pillow」を検索して「パッケージのインストール」を押す。

画像5

pillowパッケージが追加されたことを確認してOK。

画像6

パッケージをインポートして使う

画像12

「main.py」にPILをインポートしてImageモジュールを使う
from PIL import Image

画像を読む込む(読み込む画像を同じlesson4フォルダに入れる。

画像8

画像19

画像を開く

画像12

image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')

画像を表示する

画像12

# 画像を表示する
image.show()

画像20

入れた画像が表示されました。

コード

from PIL import Image

# 画像ファイルを読み込む
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')

# 画像を表示する
image.show()

サイズを変える

画像12

# サイズを変える
image2= image.resize((400, 400))

画像28

名前を付けて保存する

画像12

# 名前を指定して保存
image2.save(r'C:\Users\admin\PycharmProjects\lesson4\picture2.png')

画像28

長細くなりました。

コード

from PIL import Image

# 画像ファイルを読み込む
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')

# サイズを変える
image2 = image.resize((400, 400))

# 名前を指定して保存
image2.save(r'C:\Users\admin\PycharmProjects\lesson4\picture2.png')

# 画像を表示する
image2.show()

縦横比を維持する(thumbnil)

画像12

thumbnail(size)
size = (width, height)

「thumbnailメソッド」に戻り値はありません

# 縦横比維持
image.thumbnail((200, 200))

画像28

縦横比はそのままでサイズが小さくなった。

from PIL import Image

# 画像ファイルを読み込む
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')

# 縦横比維持
image.thumbnail((200, 200))

# 名前を指定して保存
image.save(r'C:\Users\admin\PycharmProjects\lesson4\picture3.png')

# 画像を表示する
image.show()

画像21

トリミング

画像22

crop(left, upper, right, lower)
# トリミング
im_crop = image.crop((100, 200, 300, 400))

画像28

コード

from PIL import Image

# 画像ファイルを読み込む
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')

# トリミング
trimi = image.crop((100, 200, 300, 400))
trimi.save(r'C:\Users\admin\PycharmProjects\lesson4\picture4.png')

# 画像を表示する
trimi.show()

画像24

画像25

ここらへんをトリミングしている。

回転

画像26

rotate(angle)
rotate(angle, expand=True) 
expand :回転時に画像が大きくなってしまうで回転した画像全体を残したい場合=Trueにする。

45度回転

画像47

# 回転
kaiten = image.rotate(45)

画像28

from PIL import Image

# 画像ファイルを読み込む
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')

# 回転
kaiten = image.rotate(45)
kaiten.save(r'C:\Users\admin\PycharmProjects\lesson4\picture5.png')

# 画像を表示する
kaiten.show()

画像29

平行移動

画像35

引数(translate)で回転前に平行移動させることができる。
( x 方向の移動距離,  y 方向の移動距離)
idou = image.rotate(0, translate=(100, 50))

画像49

外側の色

画像30

引数(fillcolor)で外側の色を指定できる。デフォルトは黒。
RGBの場合は(R, G, B)のタプルで指定。
image2 = image.rotate(45, fillcolor=(255, 128, 0), expand=True)

画像51

反転

画像30

上下反転  :ImageOps.flip()
左右反転  :ImageOps.mirror()
ネガポジ反転:ImageOps.invert()

反転するにはまた別のモジュールが必要になるのでインポートします。
でも特に設定から追加する必要はないです。

from PIL import Image, ImageOps

# 画像ファイルを読み込む
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')

# 上下反転
hanten = ImageOps.flip(image)
hanten.save(r'C:\Users\admin\PycharmProjects\lesson4\picture6.png')

# 画像を表示する
hanten.show()

画像31

画像34

from PIL import Image, ImageOps

# 画像ファイルを読み込む
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')

# 左右反転
hanten = ImageOps.mirror(image)
hanten.save(r'C:\Users\admin\PycharmProjects\lesson4\picture7.png')

# 画像を表示する
hanten.show()

画像32

画像33

フィルター

画像35

ImageFilterモジュールもimportに書くだけで使えます。
from PIL import Image, ImageFilter

# 画像ファイルを読み込む
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')

# フィルター
image_filter = image.filter(ImageFilter.CONTOUR)
image_filter.save(r'C:\Users\admin\PycharmProjects\lesson4\picture8.png')

# 画像を表示する
image_filter.show()

画像36

フチだけになった?

画像37

from PIL import Image, ImageFilter

# 画像ファイルを読み込む
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')

# フィルター(輪郭くっきり)
image_filter = image.filter(ImageFilter.EDGE_ENHANCE)
image_filter.save(r'C:\Users\admin\PycharmProjects\lesson4\picture9.png')

# 画像を表示する
image_filter.show()

画像38

輪郭がくっきりした!

画像41

from PIL import Image, ImageFilter

# 画像ファイルを読み込む
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')

# フィルター(ぼかす)
image_filter = image.filter(ImageFilter.BLUR)
image_filter.save(r'C:\Users\admin\PycharmProjects\lesson4\picture10.png')

# 画像を表示する
image_filter.show()

画像39

ちょっとぼやけた。

画像40

image.filter(ImageFilter.BoxBlur(5)).show()

画像52

さらにぼけた。数値を大きくすると・・

image.filter(ImageFilter.BoxBlur(10)).show()

画像53

もっとぼけた。

グレースケール

画像43

image3 = image.convert("L")
from PIL import Image

# 画像ファイルを読み込む
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')

# グレースケール
gray = image.convert("L")
gray.save(r'C:\Users\admin\PycharmProjects\lesson4\picture11.png')

# 画像を表示する
gray.show()

画像42

グレーになった。

画像44

ふぅ・・・

diet_ダイエット_太るのイラスト4-1

今日はここまで!

画像45




なにとぞ なにとぞー