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

时间:2019-10-16 02:59:22

标签: python-3.x numpy opencv image-manipulation

我今天开始学习OpenCV,我编写了一个简短的代码来上传(不知道,如果合适的话)一个随机图像:

1

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

2

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

2 个答案:

答案 0 :(得分:0)

您可以调整图像的大小并保持高宽比不变并显示它。

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

答案 1 :(得分:0)

实际的“问题”来自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,图像始终适合窗口,并且您可以根据需要手动调整窗口大小。

希望有帮助!