Python で画像のサイズを変更する

Manav Narula 2023年1月30日
  1. Python で opencv モジュールを使用して画像のサイズを変更する
  2. Python で scikit-image モジュールを使用して画像のサイズを変更する
  3. Python で画像のサイズを変更するユーザー定義関数を作成する
Python で画像のサイズを変更する

このチュートリアルでは、画像のサイズを変更する方法について説明します。

基本的に、画像を表す numpy 配列のサイズのサイズを変更します。これを実現するための numpy モジュールの直接的な機能はありません。resize() 関数は軸を無視し、補間または外挿を適用しないため、直接使用することはできません。

サイズを変更した後、このサイズ変更された配列をエクスポートして画像として保存できることに注意してください。これは、以下で説明するすべての方法に共通です。

Python で opencv モジュールを使用して画像のサイズを変更する

OpenCV モジュールは、Python で画像処理とコンピュータービジョンに広く使用されています。画像のサイズを変更するには、まず imread() 関数を使用して画像を読み取り、次に示すように resize() 関数を使用して画像のサイズを変更します。

import cv2
import numpy as np

img = cv2.imread("filename.jpeg")
res = cv2.resize(img, dsize=(54, 140), interpolation=cv2.INTER_CUBIC)

imread() は、画像を格納する配列を返します。resize() 関数を使用してサイズを変更します。ここで重要なのは interpolation パラメータです。これは基本的に画像のサイズを変更する方法を指示します。INTER_NEARESTINTER_LINEAR など、画像のサイズを変更する方法はいくつかあります。このパラメータを選択する最良の方法はありません。状況によって異なります。

Python で scikit-image モジュールを使用して画像のサイズを変更する

このモジュールは numpy ライブラリ上に構築されており、画像のサイズを効果的に変更できる resize() 関数を備えています。補間、アンチエイリアシングなどを処理しながら、さまざまなチャネルで機能します。

次のコードは、この関数の使用方法を示しています。

from skimage.transform import resize
import matplotlib.pyplot as plt

im = plt.imread("filename.jpeg")
res = resize(im, (140, 54))

上記のメソッドで画像を読み取るには、matplotlib.pyplot.imread() 関数を使用することに注意してください。お好みの方法で置き換えることができます。

Python で画像のサイズを変更するユーザー定義関数を作成する

Python でサイズ変更を実現するために、独自の関数を作成することもできます。このメソッドは、ライブラリに依存しない基本的なサイズ変更関数であり、上記のメソッドのようにアンチエイリアシングを実行する補間を実行しないことに注意してください。

次のコードは、この機能を示しています。

import matplotlib.pyplot as plt


def scale(im, nR, nC):
    number_rows = len(im)  # source number of rows
    number_columns = len(im[0])  # source number of columns
    return [
        [im[int(number_rows * r / nR)][int(number_columns * c / nC)] for c in range(nC)]
        for r in range(nR)
    ]


im = plt.imread("filename.jpeg")
res = scale(im, 30, 30)
著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

関連記事 - Python Image