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()