画像処理は意外と簡単な処理に需要がある場合があります。画像のサイズを自由に変えることができれば、ファイル容量の削減が容易にできます。Pythonであれば画像のリサイズはたった1行でできるので、重いフリーソフトをインストールする必要もありません。
こんにちは。wat(@watlablog)です。
画像処理の基本!リサイズ!ここでは簡単に画像のサイズを自由自在に変える方法を紹介します!
画像リサイズのメリット
サイズを小さくすれば容量を削減することができる
画像をリサイズするメリットは様々あります。画像のファイル容量は単純にサイズの影響を大きく受けます。
元画像のサイズを1/2, 1/3としていけば単純に画像のファイル容量を削減することができます。
サイズを大きくすれば画像処理のピクセル分解能が増える
リサイズの目的は何も容量を削減するだけではありません。画像処理を行う時は「Python/OpenCVで画像内の領域を縦横に走査する方法」で紹介したように、小領域を設定して走査することがあります。
その際、あまりに画像サイズが小さいと十分な画像処理効果を得られない時があります。その場合はリサイズであえて画像サイズを大きくすることでピクセルが拡大され、画像処理用の分解能を高めることができます。
縦横でサイズを変えるとアスペクト比を変えることができる
画像リサイズは縦と横のピクセルサイズを同じ比率変えるだけではなく、異なる比率にすることも可能です。
縦横比、つまりアスペクト比を変えることで画像としての表現や効果を変えることができます。過去、当ブログでは「Python/OpenCVの射影変換なら簡単に画像補正ができる!」で射影変換を扱いました。
射影変換を使えば画像の形を自由に変えることができましたが、縦横のサイズを変えるくらいであればそれほど面倒なコードは必要なく、簡単に画像表現を変えることが出来ます。
Pythonによるリサイズコード
カラー画像のリサイズをする全コード
本記事で扱う画像処理コードはOpenCVを使っています。OpenCVについてもっと詳しく知りたい方は「Pythonで画像処理!OpenCVのメリットとインストール法」をご覧下さい。
以下のコードが画像を読み込み、縦と横のサイズを計算し、リサイズする全コードです。使い勝手が良いように、リサイズ部分はdef関数として記載しています。
def文については、「Pythonの関数 def文の使い方!引数や別ファイル式も解説」で説明していますので、あやふやな方は是非そちらの記事も参考にして下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import cv2 # 画像リサイズをする関数 def resize(img): h, w, ch = img.shape[:3] # 画像のサイズを取得(グレースケール画像は[:2] hr = int(h * 2) # 縦方向のサイズを計算 wr = int(w * 2) # 横方向のサイズを計算 img = cv2.resize(img, (wr, hr)) # 画像をリサイズする return img img = cv2.imread('sample.jpg', 1) # カラー画像を読み込み img = resize(img) # リサイズする関数を実行 cv2.imwrite('out.jpg', img) # リサイズ後の画像を保存 |
実行結果の例
以下の図が本コード実行で保存されたリサイズ画像の例です。
(a)元画像に対して、(b)半分、(c)倍、(d)アスペクト比変更と、このコードだけで縦と横の画像サイズ変換は自由自在です。
まとめ
OpenCVを使えば画像のリサイズが自由自在にできることを確認しました。
画像リサイズはファイル容量の調整や画像処理の事前分解能調整、表現の変化等利用目的は様々な処理です。是非使いこなして下さい!
OpenCVであれば一瞬で画像サイズ変更が可能でした!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!
コメント