OpenCVを使って写真などの画像のサイズを変更する方法をご紹介します。
目次
[OpenCV]読み込んだ画像の大きさを変更(リサイズ)する方法
環境
まず、これから説明するコードに対応している実行環境は次の通り。
- Jupyter Notebook
- Google Colaboratory
※上記以外の環境でも、基本的にPytonが使える環境であればコードはそのまま使えます。
今回は以下の画像をサンプルとしてリサイズしてみます。
画像をリサイズする方法(コード)
指定したサイズに画像をリサイズ
ではまず、縦横のサイズを指定して画像をリサイズしてみましょう!
■コード
import cv2 import matplotlib.pyplot as plt # 画像の読み込み img = cv2.imread('fox_img.jpg') # 画像のサイズを200✕200に変換 img2 = cv2.resize(img, dsize=(200,200)) # カラーデータの色空間の変換 plt.imshow(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)) # 画像の表示 plt.show()
■実行結果
画像のリサイズは簡単で、
- 画像を読み込む
- resize()で変換する画像、変換したいサイズを指定
これだけで完了です。
上記のコードでは200✕200のサイズに変換する場合を例に記載しています。
dsize()の数字を変更すれば好きな大きさに変換できます。
尚、imread()で変換したい画像を指定しています、ここはみなさんが変換したい画像のファイル名、またはファイルパスを指定して下さい。
倍率を指定して画像をリサイズ(拡大・縮小)
次に、縦横の倍率を指定して画像をリサイズしてみましょう!
■コード
import cv2 import matplotlib.pyplot as plt # 画像の読み込み img = cv2.imread('fox_img.jpg') # 画像のサイズを縦横2倍のサイズに変換 img2 = cv2.resize(img, dsize=None, fx=2.0 , fy=2.0) # カラーデータの色空間の変換 plt.imshow(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)) # 画像の表示 plt.show()
■実行結果
上記の例では元画像を2倍にしています。
コードは先程のリサイズとほぼ同じですが、resize()の引数の書き方だけ変わります。
サイズの指定のところを「dsize=None, fx=2.0 , fy=2.0」と書くだけで倍率を指定して画像の大きさを変更できます。
「2.0」の数字の部分が倍率を指定している所なので、この数字を変更するだけで好きな大きさに変更できます。
尚、数字を1以下のする画像が縮小されます。
例)fx=0.5 , fy=0.5:半分の大きさに縮小
長辺のサイズを指定し、アスペクト比を変えずに画像をリサイズ
最後に、長辺のサイズを指定してアスペクト比を変えずに画像のサイズを変更する方法をご紹介します。
■コード
import cv2 import matplotlib.pyplot as plt # リサイズしたい長い辺のサイズ re_length = 300 # 画像の読み込み img = cv2.imread('fox_img.jpg') # 縦横のサイズを取得(h:縦、w:横) h, w = img.shape[:2] # 変換する倍率を計算 re_h = re_w = re_length/max(h,w) # アスペクト比を固定して画像を変換 img2 = cv2.resize(img, dsize=None, fx=re_h , fy=re_w) h2, w2 = img2.shape[:2] # カラーデータの色空間の変換 plt.imshow(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)) # 画像の表示 plt.show()
■実行結果
OpenCVではサイズを指定し、アスペクト比を固定して変換する関数が用意されていないので、指定した長辺のサイズから短辺のサイズを自動的に計算し、これを指定するという方法で、アスペクト比固定のリサイズを実現してみました。
私自身はこの方法でのリサイズが一番良く使います。
指定する部分は、「re_length」の所に長辺のリサイズする長さ、「imread()」に変換したい画像のファイル名またはファイルパスを指定の2箇所だけです。
まとめ
今回は、OpenCVを使ったリサイズする方法3つ
-
指定したサイズに画像をリサイズ
-
倍率を指定して画像をリサイズ(拡大・縮小)
-
長辺のサイズを指定し、アスペクト比を変えずに画像をリサイズ
をご紹介しました。
最後に、上記のサンプルコードを実行しても画像が表示されないという人の為に、対処方法の解説ページを作りましたので、もしお困りの方は参考にしてみて下さい。
【OpenCV】matplotlib show()で画像が表示されない場合の対処方法
OpenCVで画像処理を行った場合、matplotlibを使って編集した画像を表示て確認したいと思う事が多いと思います。 しかし、多く環境で画像が表示されないという問題に遭遇...