【问题标题】:ImageGrab not grabbing precise bbox imageImageGrab 没有抓取精确的 bbox 图像
【发布时间】:2020-07-20 18:38:24
【问题描述】:

我尝试使用pygetwindowImageGrab 来获取窗口的位置并拍摄它,但我得到的图像是正确的,但侧面也有一些额外的像素。从大小中减去一些像素也无济于事。我做错了什么还是有更好更简单的方法?也尝试使用win32gui,但得到与图像相同的输出

代码:

import pygetwindow as gw
from time import sleep
from PIL import ImageGrab

win = gw.getWindowsWithTitle('Health Card')[0]
winleft = win.left
wintop = win.top
winright = win.right
winbottom = win.bottom
sleep(3)
print(win.left,win.right,win.bottom,win.top)
a = ImageGrab.grab(bbox=(winleft,wintop,winright,winbottom))
a.save('hey.png')

图片:

我怎样才能得到,只是精确的窗口并排除窗口的标题栏

提前致谢:D

【问题讨论】:

  • 这可能是一些讨厌的阴影或窗口“装饰”。尝试捕捉几个不同大小的窗口,看看它是否是一个恒定大小的边框,然后总是在适当的一侧减去那么多像素。或者查找有关您的抓取功能的文档,看看是否有排除阴影或装饰的选项。
  • @MarkSetchell 哦,它 cud b 窗口的阴影,但我厌倦了减去,没有帮助,只是得到了一些差异大小,我认为文档也有办法:(
  • 是的@MarkSetchell 我经过长时间的搜索我得到了 c++ 的结果,我认为,现在我通过减去阴影边框解决了它:D

标签: python image user-interface tkinter python-imaging-library


【解决方案1】:

问题是由于在 Windows 10 中应用于 GUI 的 Windows 阴影。

这是我为pygetwindow 修复它的方法:

import pygetwindow as gw
from PIL import ImageGrab
from time import sleep

win = gw.getWindowsWithTitle('Health Card')[0]
winleft = win.left+9
wintop = win.top+38
winright = win.right-9
winbottom = win.bottom-9

sleep(3)
a = ImageGrab.grab(bbox=(winleft,wintop,winright,winbottom))
a.save('trial.png')

或者,如果您使用的是win32gui,请尝试

from win32gui import FindWindow, GetWindowRect
from time import sleep
from PIL import ImageGrab

win = FindWindow(None, 'Health Card')
rect = GetWindowRect(win)
list_rect = list(rect)
list_frame = [-9, -38, 9, 9]
final_rect = tuple(map(lambda x,y:x-y,list_rect,list_frame)) #subtracting two lists

sleep(3)
a = ImageGrab.grab(bbox=final_rect)
a.save('trial.png')

我用map()来减去两个列表,你可以使用任何你喜欢的方法(例如:numpy)。

最终输出:

解释: 通常边框仅用于左、右和底部,我也删除了标题栏,并且我使用 + cuz 的轴差异。这几乎等同于裁剪。我认为窗口阴影的标准尺寸是 7px,所以我们必须删除 7-10px 之类的东西才能准确

【讨论】:

  • 干得好 - 感谢您与 SO 社区分享您的发现。顺便说一句,您可以接受自己的答案并获得积分。
猜你喜欢
  • 2022-11-18
  • 1970-01-01
  • 2015-12-08
  • 2012-02-13
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多