Python(基礎編:画像処理)
今日は画像処理を勉強します。画像処理で使うライブラリーで代表的なものに「Pillow」「NumPy」「OpenCV」があります。
・Pillow(PIL): 画像処理ライブラリ
・NumPy: 科学計算ライブラリ
・OpenCV: コンピュータビジョンライブラリ
今回は「Pillow」パイロウというものを勉強します。
Pillow(PIL)
Pillow(PIL)は画像処理ライブラリの1つで、Anacondaに含まれているので、設定に追加してimportすると使用可能。
「Pycharm」を使います。
新規プロジェクトを作成
ロケーションでフォルダー名を作って、作成ボタンを押す。
パッケージを追加する
設定からパッケージを追加する。
「ファイル」「設定」を押す。
「プロジェクト」「Pythonインタープリター」から「+」を選択する。
「pillow」を検索して「パッケージのインストール」を押す。
pillowパッケージが追加されたことを確認してOK。
パッケージをインポートして使う
「main.py」にPILをインポートしてImageモジュールを使う
from PIL import Image
画像を読む込む(読み込む画像を同じlesson4フォルダに入れる。
画像を開く
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')
画像を表示する
# 画像を表示する
image.show()
入れた画像が表示されました。
コード
from PIL import Image
# 画像ファイルを読み込む
image = Image.open(r'C:\Users\admin\PycharmProjects\lesson4\picture1.png')
# 画像を表示する
image.show()
サイズを変える
# サイズを変える
image2= image.resize((400, 400))
名前を付けて保存する
# 名前を指定して保存
image2.save(r'C:\Users\admin\PycharmProjects\lesson4\picture2.png')
長細くなりました。
コード
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)
thumbnail(size)
size = (width, height)
「thumbnailメソッド」に戻り値はありません
# 縦横比維持
image.thumbnail((200, 200))
縦横比はそのままでサイズが小さくなった。
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()
トリミング
crop(left, upper, right, lower)
# トリミング
im_crop = image.crop((100, 200, 300, 400))
コード
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()
ここらへんをトリミングしている。
回転
rotate(angle)
rotate(angle, expand=True)
expand :回転時に画像が大きくなってしまうで回転した画像全体を残したい場合=Trueにする。
45度回転
# 回転
kaiten = image.rotate(45)
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()
平行移動
引数(translate)で回転前に平行移動させることができる。
( x 方向の移動距離, y 方向の移動距離)
idou = image.rotate(0, translate=(100, 50))
外側の色
引数(fillcolor)で外側の色を指定できる。デフォルトは黒。
RGBの場合は(R, G, B)のタプルで指定。
image2 = image.rotate(45, fillcolor=(255, 128, 0), expand=True)
反転
上下反転 :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()
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()
フィルター
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()
フチだけになった?
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()
輪郭がくっきりした!
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()
ちょっとぼやけた。
image.filter(ImageFilter.BoxBlur(5)).show()
さらにぼけた。数値を大きくすると・・
image.filter(ImageFilter.BoxBlur(10)).show()
もっとぼけた。
グレースケール
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()
グレーになった。
ふぅ・・・
今日はここまで!
いいなと思ったら応援しよう!
なにとぞ なにとぞー