Оптимальный способ изменить размер изображения с OpenCV Python - PullRequest
2 голосов
/ 02 июля 2019

Я хочу изменить размер изображения в процентах и ​​сделать его максимально приближенным к оригиналу с минимальным уровнем шума и искажений. Размер может быть увеличен или уменьшен, так как я могу масштабировать до 5% размера исходного изображения или 500% (или любое другое значение, которое приведено в качестве примера)

Это то, что я пробовал, и мне понадобятся абсолютные минимальные изменения в изображении с измененным размером, поскольку я буду использовать его по сравнению с другими изображениями

def resizing(main,percentage):
    main = cv2.imread(main)
    height = main.shape[ 0] * percentage
    width = crop.shape[ 1] * percentage
    dim = (width,height)
    final_im = cv2.resize(main, dim, interpolation = cv2.INTER_AREA)
    cv2.imwrite("C:\\Users\\me\\nature.jpg", final_im)

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Я думаю, вы пытаетесь изменить размер и сохранить соотношение сторон. Вот функция увеличения или уменьшения изображения в процентах

Пример исходного изображения

enter image description here

Изменение размера изображения до 0,5 (50%)

enter image description here

Изменение размера изображения до 1,3 (130%)

enter image description here

import cv2

# Resizes a image and maintains aspect ratio
def maintain_aspect_ratio_resize(image, width=None, height=None, inter=cv2.INTER_AREA):
    # Grab the image size and initialize dimensions
    dim = None
    (h, w) = image.shape[:2]

    # Return original image if no need to resize
    if width is None and height is None:
        return image

    # We are resizing height if 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)
    # We are resizing width if height is none
    else:
        # Calculate the ratio of the width and construct the dimensions
        r = width / float(w)
        dim = (width, int(h * r))

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

if __name__ == '__main__':
    image = cv2.imread('1.png')
    cv2.imshow('image', image)
    resize_ratio = 1.2
    resized = maintain_aspect_ratio_resize(image, width=int(image.shape[1] * resize_ratio))
    cv2.imshow('resized', resized)
    cv2.imwrite('resized.png', resized)
    cv2.waitKey(0)
0 голосов
/ 02 июля 2019

Вы можете использовать этот синтаксис cv2.resize:

  cv2.resize(image,None,fx=int or float,fy=int or float)

fx зависит от ширины

fy зависит от высоты

Вы можете поставитьвторой аргумент None или (0,0)

Пример:

  img = cv2.resize(oriimg,None,fx=0.5,fy=0.5)

Примечание:

0,5 означает 50% масштабируемого изображения

...