Python

【Python】画像の解像度の変更。リサイズ(拡大・縮小)

  • このエントリーをはてなブックマークに追加

今回は、Pythonの画像処理ライブラリでも
有名なPillowとOpenCVによる画像のリサイズ方法について紹介します。

Pillow(PIL)によるリサイズ

pillowはPythonで標準的な画像処理ライブラリです。
過去にメジャーだった
Python Imaging Libraryの後継ライブラリです。
pillowは、Python2にも3にも対応しています。

Pillow(PIL)をインストール

インストールはpipで簡単にインストールできます。

pip install pillow

Image.resize

Pillowでは、Image.resizeで画像の拡大・縮小を行います。
使い方は、つぎのようになります。

from PIL import Image
img = Image.open('img.jpg')
width,height=640,480
img = img.resize((width,height))
img.save('img_resize.jpg')

画像を640 x 480ピクセルに解像度を変更して保存するコードです。

画像を指定の高さで圧縮するサンプルコード

次にアスペクト比(縦横比)を保ちながら
画像を指定の幅で保存ずるコードを紹介します。

# resize.py
# coding:utf-8
import sys
import os
from PIL import Image
img_path = sys.argv[1]
resize_width = float(sys.argv[2])
img = Image.open(img_path)
# 画像の解像度を取得して、リサイズする高さを計算
img_width,img_height = img.size
resize_height = resize_width / img_width * img_height
# 画像をリサイズ
img = img.resize((int(resize_width),int(resize_height)))
# リサイズした画像を(ファイル名-幅-高さ.拡張子)で保存
root, ext = os.path.splitext(img_path)
resize_img_path = "".join([root,"-%s-%s" % (int(resize_width),int(resize_height)),ext])
img.save(resize_img_path)

使い方

python resize.py 画像のパス 画像の高さ

引数で渡した画像をリサイズして(ファイル名-幅-高さ.拡張子)で保存します。

使用例

python resize.py img.jpg 640

ファイルパスのTips

リサイズしたファイル名を保存する際に、
ファイルパスに関するメソッドを多く使っています。
詳細が気になる人は、下記の記事が参考になります。
https://www.tech-tech.xyz/python-file-tips/#Tips-3

OpenCVによるリサイズ

OpenCVをインストール

インストールしていない場合、インストールしましょう。

pip install opencv-contrib-python

詳細が気になる方は、下記の記事を参考にしてください。
https://www.tech-tech.xyz/python-opencv-pip-install/

cv2.resize

import cv2
img = cv2.imread('img.jpg')
width,height=640,480
img = cv2.resize(img,(width, height))
cv2.imwrite('img-resize.jpg',img)

OpenCVのリサイズは奥が深い

OpenCVのリサイズは、圧縮方法なども選択できて奥が深いです。
詳細は下記の記事にまとまっているので参考にして下さい。
https://www.tech-tech.xyz/opecv_resize/

画像を指定の高さで画像を圧縮するサンプルコード

# resize_cv.py
# coding:utf-8
import sys
import os
import cv2
img_path = sys.argv[1]
resize_width = float(sys.argv[2])
img = cv2.imread(img_path)
# 画像の解像度を取得して、リサイズする高さを計算
img_height,img_width,_ = img.shape
resize_height = resize_width / img_width * img_height
# 画像をリサイズ
img = cv2.resize(img,(int(resize_width),int(resize_height)))
# リサイズした画像を(ファイル名-幅-高さ.拡張子)で保存
root, ext = os.path.splitext(img_path)
resize_img_path = "".join([root,"-%s-%s" % (int(resize_width),int(resize_height)),ext])
cv2.imwrite(resize_img_path,img)

使い方

python resize_cv.py 画像のパス 画像の高さ

引数で渡した画像をリサイズして(ファイル名-幅-高さ.拡張子)で保存します。

使用例

python resize_cv.py img.jpg 640

ファイルパスのTips

リサイズしたファイル名を保存する際に、
ファイルパスに関するメソッドを多く使っています。
詳細が気になる人は、下記の記事が参考になります。
https://www.tech-tech.xyz/python-file-tips/#Tips-3

  • このエントリーをはてなブックマークに追加