Python|OpenCVをつかって画像をリサイズする

あることをやるために、縦・横向きの写真をまとめてリサイズするPythonを組みました。

OpenCVの勉強になったので、スクリプトの一部を抜粋し「アスペクト比を固定したサイズ方法」をまとめます。

動作環境

  • macOS Mojave v10.14.5
  • Python 3.7.3
  • opencv-python 4.1.0.25(pipでインストール)

リサイズ仕様

  • 長辺に対してリサイズ(縮小)するサイズを指定する
  • アスペクト比を維持しながら短辺を合わせる
  • 正方形の画像には未対応

ソースコード

import math

import cv2


def create_resize_photo(long_side_size):
    # 画像の読み込み
    img = cv2.imread('sample.jpg')

    # 画像の Height & width を取得
    img_height, img_width = img.shape[:2]

    # 画像の向きを確認
    if img_height < img_width:  # 横向き
        # 縮小率を計算
        scale = img_width / long_side_size
        # リサイズするサイズ(横, 縦)を設定
        size = (long_side_size, math.ceil(img_height / scale))
    else:  # 縦向き
        scale = img_height / long_side_size
        size = (math.ceil(img_width / scale), long_side_size)

    # 画像をリサイズ(縮小、バイキュービック補間)
    cubic_img = cv2.resize(img, size, interpolation=cv2.INTER_CUBIC)

    # 画像を保存(圧縮品質80)
    cv2.imwrite('dist_sample.jpg', cubic_img, [
                int(cv2.IMWRITE_JPEG_QUALITY), 80])


if __name__ == '__main__':
    create_resize_photo(1000)

ざっくりこんな風に組みました。

  1. 画像を読み込む
  2. 高さ・幅のサイズを取得する
  3. 高さと幅を比較する
  4. 縮小率を算出する(scale)
  5. 縮小サイズを設定する
  6. リサイズする(以下の補間方法がある)
    • cv2.INTER_NEAREST: 最近傍補間法
    • cv2.INTER_LINEAR: バイリニア補間
    • cv2.INTER_CUBIC: バイキュービック補間
    • cv2.INTER_AREA: ピクセル領域の関係を利用したリサンプリング
    • cv2.INTER_LANCZOS4: Lanczos法補間
  7. 保存する
    • cv2.IMWRITE_JPEG_QUALITYが高いほど高品質(1〜100)

難しいことはしてなくて、ひとつひとつ順にやっていけば望むものが得られます。コードに書いたように長辺に1000pxを指定するとこうなりました。

sc_190713
左:リサイズ前画像 / 右:リサイズ後画像

4928pxの長辺を1000pxにリサイズ(約1/5)して、短辺が3264px → 663pxへとリサイズ(約1/5)されました。

所感

今回つかった画像では、リサイズすると細部の画質が落ちるように感じました。Photoshopでリサイズしたときと比べてザラザラしているのです。

補間方法を変えても大きく改善されるようには見えないんですよね。画像次第なのかなぁ、う〜ん。

もっと上手いことできるのかと思いますが、これ以上は追求しません。ひとまずリサイズの大きな流れは理解できました。

ってことでよしとします!

【出張撮影のご依頼、承ってます】

あなたの行きたい場所に出張してポートレイトやプロフィール写真を撮影します。出張エリアは関西エリア(神戸・大阪・京都など)、関東エリア(神奈川、東京など)です。

★詳細:ポートレイト/プロフィール撮影(Photo Session)
★詳細:Photo Shooting

撮影予約可能日

【関西エリア】
・当面の間は関西にいます。ご依頼お待ちしています。

【関東エリア】
・7月上旬、8月上旬に関東予定です。

まずはお気軽にご相談ください

この記事を書いた人

花村貴史|Takashi Q. Hanamura

人物や風景、街並み、小物を好んで撮っている空気感フォトグラファー。本職であるPhotographerのかたわら、Engineer、Creatorとしても活動中。
その人・その場の「空気感をそっとすくい撮る」写真が好評。「自分の素敵に気づける写真」を撮る。数年間の心のお稽古によるカウンセラーマインドによって、撮影は「心のセッション」になることも。
オシゴトについては「撮影サービス」からどうぞ。

撮影|Photo Session

お話しながらのポートレイト撮影です。「今」そして「これから」のあなたにフォーカスして撮影します。SNSやサイト用のプロフィール写真に。

撮影|Photo Shooting

「友達と楽しんでいる」「セミナーで講演している」「パーティーを主催している」など、皆さんが大切な時間を過ごしている瞬間をスナップします。

写真術|Photo Lecture

カメラの使い方、撮影術、Lightroomの使い方などの「マンツーマンレクチャ」や「少人数制のワークショップ」について。写真に関する疑問の解決に。

販売:Photo Sales

A3ノビ〜A4程度のサイズの額装販売および、壁紙などの写真データの販売。ご自宅やコミニュティスペースに飾り、癒しになれば嬉しい。