OpenCV展示窗口太大-图片模糊

时间:2019-01-11 15:00:08

标签: python windows opencv

在OpenCV-Python中,当我使用namedWindow使用要显示的图像尺寸创建cv2.resizeWindow时,窗口大小无法正确调整。

import numpy as np
import cv2

window_title = 'image'

img = cv2.imread('test.jpg', cv2.IMREAD_COLOR)
height, width = img.shape[:-1]

cv2.namedWindow(window_title, cv2.WINDOW_NORMAL)
cv2.resizeWindow(window_title, width, height)
cv2.imshow(window_title, img)
cv2.waitKey(0)
cv2.destroyAllWindows()

See the attached screenshot to see the results.

test.jpg是VS Code窗口(800x600像素)的屏幕截图的一部分。 调整大小后,图像窗口显然太大了。

如何轻松地将窗口调整为正确的大小,以使显示的图像不会模糊?

我正在使用Python 3.7.2,OpenCV 3.4.2,Windows 10 64位。

1 个答案:

答案 0 :(得分:1)

DanMašek正确地注意到与原始图像尺寸相比,OpenCV窗口的缩放比例为125%,这使我想到了解决方案。

此行为是Windows的最新版本的UI缩放功能的结果。 (在“设置\系统\显示\缩放”下查看)

由于OpenCV不会将其GUI窗口标记为“ DPI Aware”,因此Windows会将它们缩放到用户指定的百分比。

(另一个副作用是win32gui.GetWindowRect()返回了看似不正确的坐标,如here所述)


解决方法

转到python.exe的路径,右键单击可执行文件,选择“属性”,然后在“兼容性”选项卡下单击“更改高DPI设置”。然后激活“覆盖高DPI缩放行为”,将“缩放依据”设置为“应用”。

不过,这将更改此python.exe服务的所有会话的行为。 可以使用虚拟环境来克服这一限制。


解决方案

This SO article描述了如何在Python代码内的每个会话级别设置缩放行为。