【Python】OpenCVのresize

プログラム

OpenCVを使ってみました。
その時のresizeで落とし穴というか、おや?思ったことがあったので残します。
まずは使用するために以下の記述でインポートします。

import cv2

このプログラムを保存している同じフォルダにtest.jpgという画像ファイルの
BGR(RGBではないらしく、アルファベット順?)データを読み込みます。

file_name = 'test.jpg'
img =cv2.imread(file_name, cv2.IMREAD_COLOR)
type(img)

------------------------------
numpy.ndarray

imgを確認してみると、BGRのデータがndarrayで格納されています。

ndarrayの大きさを確認すると縦4080、横3072の画像サイズのBGR値が入っています。

img.shape

------------------------------
(4080, 3072, 3)

画像を表示させるコマンドはこちら。

cv2.imshow('test', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

膝上に座っている愛犬です。(飼い主バカです)

ここで件のresizeを実行してみると

img_resize = cv2.resize(img, dsize=(1020, 768))
img_resize.shape

------------------------------
(768, 1020, 3)

行と列、縦と横が入れ替わった?となったわけです。
実際に表示させてみると横に延ばされてしまいました。

resizeするときはdsize=(縦, 横)ではなくdsize=(横, 縦)のようです。
img.shapeで行数(縦)と列数(横)を確認したときと逆になるから注意が必要です。

img_resize2 = cv2.resize(img, dsize=(768, 1020))
img_resize2.shape

------------------------------
(1020, 768, 3)

縦と横を惑わされないように以下のようにresizeすることもできます。

img_resize3 = cv2.resize(img, dsize=None, fx=1/4, fy=1/4)
img_resize3.shape

------------------------------
(1020, 768, 3)
タイトルとURLをコピーしました