1. ホーム
  2. python

画像を歪ませることなくリサイズする方法 OpenCV

2023-12-30 15:47:06

質問

python 3と最新版のopenCVを使用しています。提供されているresize関数を使って画像をリサイズしようとしていますが、リサイズ後の画像は非常に歪んでいます。コード。

import cv2
file = "/home/tanmay/Desktop/test_image.png"
img = cv2.imread(file , 0)
print(img.shape)
cv2.imshow('img' , img)
k = cv2.waitKey(0)
if k == 27:
    cv2.destroyWindow('img')
resize_img = cv2.resize(img  , (28 , 28))
cv2.imshow('img' , resize_img)
x = cv2.waitKey(0)
if x == 27:
    cv2.destroyWindow('img')

元画像は480×640(RGBなので0を渡してグレースケールにした)。

OpenCVや他のライブラリを使って、サイズを変更し、歪みを避ける方法はありますか?私は手書きの数字認識装置を作るつもりで、MNIST データを使用して私のニューラルネットワークを訓練しているので、画像は 28 x 28 である必要があります。

どのように解決するのですか?

以下の方法を試してみてください。この関数は、元画像のアスペクト比を維持します。

def image_resize(image, width = None, height = None, inter = cv2.INTER_AREA):
    # initialize the dimensions of the image to be resized and
    # grab the image size
    dim = None
    (h, w) = image.shape[:2]

    # if both the width and height are None, then return the
    # original image
    if width is None and height is None:
        return image

    # check to see if the width is None
    if width is None:
        # calculate the ratio of the height and construct the
        # dimensions
        r = height / float(h)
        dim = (int(w * r), height)

    # otherwise, the height is None
    else:
        # calculate the ratio of the width and construct the
        # dimensions
        r = width / float(w)
        dim = (width, int(h * r))

    # resize the image
    resized = cv2.resize(image, dim, interpolation = inter)

    # return the resized image
    return resized

以下は使用例です。

image = image_resize(image, height = 800)

これが役立つといいのですが。