在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位。
答案 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代码内的每个会话级别设置缩放行为。