OpenCV & Python - изображение слишком большое для отображения

У меня есть изображение размером 6400 × 3200, тогда как мой экран 1280 x 800. Поэтому изображение нужно изменять только для отображения. Я использую Python и OpenCV 2.4.9. Согласно Документация OpenCV,

Если вам нужно показать изображение, которое больше разрешения экрана, вам нужно будет вызвать namedWindow ("", WINDOW_NORMAL) перед имшоу.

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

import cv2
cv2.namedWindow("output", cv2.WINDOW_NORMAL)        # Create window with freedom of dimensions
# cv2.resizeWindow("output", 400, 300)              # Resize window to specified dimensions
im = cv2.imread("earth.jpg")                        # Read image
cv2.imshow("output", im)                            # Show image
cv2.waitKey(0)                                      # Display the image infinitely until any keypress

Ответ 1

Несмотря на то, что я ожидал автоматического решения (автоматически устанавливая экран), изменение размера также решает проблему.

import cv2
cv2.namedWindow("output", cv2.WINDOW_NORMAL)        # Create window with freedom of dimensions
im = cv2.imread("earth.jpg")                        # Read image
imS = cv2.resize(im, (960, 540))                    # Resize image
cv2.imshow("output", imS)                            # Show image
cv2.waitKey(0)                                      # Display the image infinitely until any keypress

Ответ 2

Попробуйте это:

image = cv2.imread("img/Demo.jpg")
image = cv2.resize(image,(240,240))

Размер image теперь изменен. Отображение будет отображаться в 240x240.

Ответ 3

В opencv cv.namedWindow() просто создает объект окна по вашему усмотрению, но не изменяет размер исходного изображения. Вы можете использовать cv2.resize(img, resolution) для решения проблемы.

Вот что он отображает, изображение с разрешением 740 * 411. The original image

image = cv2.imread("740*411.jpg")
cv2.imshow("image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Здесь отображается изображение с разрешением 100 * 200 после изменения размера. Помните, что столбец использования параметра разрешения - это сначала строка.

Image after resizing

image = cv2.imread("740*411.jpg")
image = cv2.resize(image, (200, 100))
cv2.imshow("image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Ответ 4

Другие ответы выполняют фиксированный размер (width, height). Если вы хотите изменить размер до определенного размера, сохраняя соотношение сторон, используйте этот

def ResizeWithAspectRatio(image, width=None, height=None, inter=cv2.INTER_AREA):
    dim = None
    (h, w) = image.shape[:2]

    if width is None and height is None:
        return image
    if width is None:
        r = height / float(h)
        dim = (int(w * r), height)
    else:
        r = width / float(w)
        dim = (width, int(h * r))

    return cv2.resize(image, dim, interpolation=inter)
Пример

Example

image = cv2.imread('img.png')
resize = ResizeWithAspectRatio(image, width=1280) # Resize by width OR
# resize = ResizeWithAspectRatio(image, height=1280) # Resize by height 

cv2.imshow('resize', resize)
cv2.waitKey()