OpenCVイメージサイズの調整
画像のサイズを変更するには、指定したスケールを考慮して、各軸(高さと幅)に沿ってサイズを変更するか、必要な高さと幅を設定します.
画像サイズの調整のサイズ変更された画像で同じままにする場合は、画像の元のアスペクト比(高さ幅)を維持する必要があります. 画像のサイズを小さくするには、ピクセルを再抽出する必要があります. 画像のサイズを大きくするには、画像を再編成する必要があります.すなわち、新しい画素を挿入する必要がある.
まず、画像サイズを縮小または増加させるためには、画像を読み取る必要がある.
画像サイズを調整する前に、画像ソースのサイズを得る必要があります.
OpenCVを使用して画像を読み込むと、Numpy配列として表示されます.また、配列の形状は、通常、行(行は高さ、列は幅)の角度から常に参照される.このような形状は、OpenCVを用いて画像を読み取る場合、同じNumpy配列規則(高さ幅*チャネル形式)を用いて得られる.
dsize:出力画像の新しい高さと幅を指定します
fx:水平軸に沿ってスケール
fy:垂直軸に沿ってスケール
補間:画像のサイズを調整する方法をいくつか提供します.
縮小の幅を300、高さを200に設定します. の幅を600に、高さを400に設定します. この2つの値はresize()関数に必要な2次元ベクトルと結合している. もデフォルトの補間方法を指定します.
左は縮小画像、右は拡大画像です.ズーム操作で定義された新しい高さと幅のパラメータに基づいて、画像はより大きくなります.しかし、幅と高さの明示的な値を定義することで、この調整は結果画像を歪ませている点に注目してください.すなわち、画像のアスペクト比を一定に保つことはできない.
この問題を解決するには、大きな時間にスケール係数を使用する方法を理解する必要があります.
スケーリング係数またはスケーリング係数は、通常、画像の幅および高さに比例する数または数を乗じた数である.アスペクト比を一定に保ち、表示品質を維持するのに役立ちます.したがって、画像を拡大または縮小する場合、画像はねじれません.の水平軸と垂直軸に沿った新しいスケール係数を定義します. スケール係数を定義するには、新しい幅と高さの点は必要ありません.したがって、サイズはなしのままにします.
左の画像は縮小バージョン、右は拡大バージョンです.
INTER_AREA
画素領域関係を用いて 回のサンプリングを行った. これは、画像のサイズを縮小するのに最適です. 画像を拡大する場合はINTER NEAREST法を用いる.
INTER_CUBIC
二重三次補間を使用して、 画像のサイズを調整します. この方法は、の新しい画素を調整および補間する場合に、画像の4 x 4隣接画素に適用される. は次に、16ピクセルの加重平均値を取り、新しい補間ピクセルを生成する.
INTER_LINEAR INTER CUBIC補間法と似ています. であるが、2 x 2隣接画素を用いて補間画素の加重平均値を得る.
INTER_NEAREST INTER NEAREST法は最近の隣接概念を用いて補間する. これは、画像において1つの隣接画素のみを用いて補間を行う最も簡単な方法の1つである.
画像サイズの調整
画像を読み込み
まず、画像サイズを縮小または増加させるためには、画像を読み取る必要がある.
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:垂直軸に沿ってスケール
補間:画像のサイズを調整する方法をいくつか提供します.
幅と高さを指定してサイズを変更
縮小
# 축소
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_CUBIC
二重三次補間を使用して、
INTER_LINEAR
INTER_NEAREST
Reference
この問題について(OpenCVイメージサイズの調整), 我々は、より多くの情報をここで見つけました https://velog.io/@rlath/OpenCV-이미지-크기-조정テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol