Как изменить размер окна, полученного из cv2.imshow ()? - PullRequest
0 голосов
/ 16 октября 2019

Я начал изучать OpenCV сегодня и написал короткий код для загрузки (не знаю, правильный ли это термин) случайного изображения:

1

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

2

Итак, я хотел бы знать, как можно было бы красиво и хорошо видеть все изображение в более коротком окне.

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Фактическая «проблема» происходит от самой imshow и является следующей:

Если окно не было создано до этой функции, предполагается, что оно создаетокно с cv::WINDOW_AUTOSIZE.

Глядя на соответствующее описание на странице документации WindowFlags, получаем:

пользователь не может изменить размер окна, размер ограничен отображаемым изображением.

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

Давайте посмотрим этот фрагмент кода:

import cv2

# Read image
image = cv2.imread('path/to/your/image.png')

# Window from plain imshow() command
cv2.imshow('Window from plain imshow()', image)

# Custom window
cv2.namedWindow('custom window', cv2.WINDOW_KEEPRATIO)
cv2.imshow('custom window', image)
cv2.resizeWindow('custom window', 200, 200)

cv2.waitKey(0)
cv2.destroyAllWindows()

Примерный вывод будет выглядеть следующим образом (исходный размер изображения [400, 400]):

Output

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

Надеюсь, это поможет!

0 голосов
/ 16 октября 2019

Вы можете изменить размер изображения, сохранив соотношение сторон, и отобразить его.

#Display image
def display(img, frameName="OpenCV Image"):
    h, w = img.shape[0:2]
    neww = 800
    newh = int(neww*(h/w))
    img = cv2.resize(img, (neww, newh))
    cv2.imshow(frameName, img)
    cv2.waitKey(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...