Фактическая «проблема» происходит от самой 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]
):
Используя cv2.WINDOW_KEEPRATIO
, изображение всегда подгоняется к окну, и вы можете изменить размер окна вручную, если хотите.
Надеюсь, это поможет!