如何调整从 cv2.imshow() 获得的窗口的大小?

Ann*_*iek 0 opencv image-manipulation numpy python-3.x

我今天开始学习 OpenCV,我写了一个简短的代码来上传(我不知道,如果它是正确的术语)随机图像:

1

它工作正常,我可以打开图像,但我得到的是一个大窗口,除非我滚动它,否则我看不到完整的图像:

2

所以,我想知道一种方法,可以在较短的窗口中很好地看到整个图像。

Han*_*rse 7

实际的“问题”来自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()
Run Code Online (Sandbox Code Playgroud)

示例输出如下所示(原始图像大小为[400, 400]):

输出

使用cv2.WINDOW_KEEPRATIO,图像始终适合窗口,如果需要,您可以手动调整窗口大小。

希望有帮助!

  • 我[可能来自文档](https://docs.opencv.org/4.5.4/d7/dfc/group__highgui.html)`cv2.WINDOW_KEEPRATIO`仅适用于qt后端 (4认同)