OpenCVイメージサイズの調整


画像のサイズを変更するには、指定したスケールを考慮して、各軸(高さと幅)に沿ってサイズを変更するか、必要な高さと幅を設定します.
画像サイズの調整
  • のサイズ変更された画像で同じままにする場合は、画像の元のアスペクト比(高さ幅)を維持する必要があります.
  • 画像のサイズを小さくするには、ピクセルを再抽出する必要があります.
  • 画像のサイズを大きくするには、画像を再編成する必要があります.すなわち、新しい画素を挿入する必要がある.
  • 画像を読み込み


    まず、画像サイズを縮小または増加させるためには、画像を読み取る必要がある.
    import cv2
    import numpy as np
    
    image = cv2.imread('image.jpg')

    元のサイズの決定


    画像サイズを調整する前に、画像ソースのサイズを得る必要があります.

    image.shape

    # shape는 높이, 너비 및 채널 수의 세 가지 값을 반환한다
    h, w, c = image.shape
    OpenCVの画像フォーマットは、高さ幅のチャネルフォーマットです.しかし、いくつかの異なる画像処理ライブラリでは、幅、高さの形で出力されます.
    OpenCVを使用して画像を読み込むと、Numpy配列として表示されます.また、配列の形状は、通常、行(行は高さ、列は幅)の角度から常に参照される.このような形状は、OpenCVを用いて画像を読み取る場合、同じNumpy配列規則(高さ幅*チャネル形式)を用いて得られる.

    サイズ変更


    resize()

    cv2.resize(src, dsize, [fx, fy, interpolation])
    src:入力画像パス付き文字列
    dsize:出力画像の新しい高さと幅を指定します
    fx:水平軸に沿ってスケール
    fy:垂直軸に沿ってスケール
    補間:画像のサイズを調整する方法をいくつか提供します.

    幅と高さを指定してサイズを変更


    縮小
  • の幅を300、高さを200に設定します.
  • の幅を600に、高さを400に設定します.
  • この2つの値はresize()関数に必要な2次元ベクトルと結合している.
  • もデフォルトの補間方法を指定します.
  • # 축소
    down_width = 300
    down_height = 200
    down_points = (down_width, down_height)
    resized_down = cv2.resize(image, down_points, interpolation=cv2.INTER_LINEAR)
    
    # 확대
    up_width = 600
    up_height = 400
    up_points = (up_width, up_height)
    # resize the image
    resized_up = cv2.resize(image, up_points, interpolation=cv2.INTER_LINEAR)

    ズーム後の画像を表示

    cv2.imshow('Resized Down', resized_down)
    cv2.waitKey()
    cv2.imshow('Resized Up', resized_up)
    cv2.waitKey()
    cv2.destroyAllWindows()

    左は縮小画像、右は拡大画像です.ズーム操作で定義された新しい高さと幅のパラメータに基づいて、画像はより大きくなります.しかし、幅と高さの明示的な値を定義することで、この調整は結果画像を歪ませている点に注目してください.すなわち、画像のアスペクト比を一定に保つことはできない.
    この問題を解決するには、大きな時間にスケール係数を使用する方法を理解する必要があります.

    スケール(Scale)


    スケーリング係数またはスケーリング係数は、通常、画像の幅および高さに比例する数または数を乗じた数である.アスペクト比を一定に保ち、表示品質を維持するのに役立ちます.したがって、画像を拡大または縮小する場合、画像はねじれません.
    # Scaling Up 이미지 1.2배 시킬 x, y의 scale factor
    scale_up_x = 1.2
    scale_up_y = 1.2
    # Scaling Down 이미지 0.6배 시킬 하나의 sacle factor
    scale_down = 0.6
     
    scaled_f_down = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_LINEAR)
    scaled_f_up = cv2.resize(image, None, fx= scale_up_x, fy= scale_up_y, interpolation= cv2.INTER_LINEAR)
  • の水平軸と垂直軸に沿った新しいスケール係数を定義します.
  • スケール係数を定義するには、新しい幅と高さの点は必要ありません.したがって、サイズはなしのままにします.
  • ズーム画像

    cv2.imshow('Resized Down scale factor', scaled_f_down)
    cv2.waitKey()
    cv2.imshow('Resized Up scaling factor', scaled_f_up)
    cv2.waitKey()

    左の画像は縮小バージョン、右は拡大バージョンです.

    複数の補間方法でサイズを調整する


  • INTER_AREA
    画素領域関係を用いて
  • 回のサンプリングを行った.
  • これは、画像のサイズを縮小するのに最適です.
  • 画像を拡大する場合はINTER NEAREST法を用いる.

  • INTER_CUBIC
    二重三次補間を使用して、
  • 画像のサイズを調整します.
  • この方法は、
  • の新しい画素を調整および補間する場合に、画像の4 x 4隣接画素に適用される.
  • は次に、16ピクセルの加重平均値を取り、新しい補間ピクセルを生成する.

  • INTER_LINEAR
  • INTER CUBIC補間法と似ています.
  • であるが、2 x 2隣接画素を用いて補間画素の加重平均値を得る.

  • INTER_NEAREST
  • INTER NEAREST法は最近の隣接概念を用いて補間する.
  • これは、画像において1つの隣接画素のみを用いて
  • 補間を行う最も簡単な方法の1つである.