Python ImageGrab未捕获精确的bbox图像

Python ImageGrab未捕获精确的bbox图像,python,image,user-interface,tkinter,python-imaging-library,Python,Image,User Interface,Tkinter,Python Imaging Library,我尝试使用pygetwindow和ImageGrab来获取窗口的位置并对其进行快照,但我得到了某种正确的图像,但也从侧面获得了一些额外的像素。从大小中减去一些像素也没有帮助。我做错了什么,或者有更好更简单的方法吗?还尝试使用win32gui,但获得与图像相同的输出 代码: 图片: 我如何才能准确地获取窗口并排除窗口的标题栏 提前感谢:D问题是由于windows 10中的GUI应用了windows阴影 下面是我如何为pygetwindow修复它的: import pygetwindow as g

我尝试使用
pygetwindow
ImageGrab
来获取窗口的位置并对其进行快照,但我得到了某种正确的图像,但也从侧面获得了一些额外的像素。从大小中减去一些像素也没有帮助。我做错了什么,或者有更好更简单的方法吗?还尝试使用
win32gui
,但获得与图像相同的输出

代码:

图片:

我如何才能准确地获取窗口并排除窗口的标题栏


提前感谢:D

问题是由于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之类的东西以保证准确度

这可能是一些讨厌的阴影或窗户“装饰”。尝试捕捉几个大小不同的窗口,看看它是否是一个恒定大小的边框,然后总是在适当的一侧减去那么多像素。或者查找有关grab函数的文档,看看是否有排除阴影或装饰的选项。@MarkSetchell oh ya it cud b shadows of the window,但我累了减法,没有帮助,jus得到了一些不同的大小,我认为文档也有办法:(是的,@),经过长时间的搜索,我得到了C++的结果,现在我通过减去阴影边界来解决它:Deldo-Dead——谢谢你和SO社区分享你的发现。顺便说一下,你可以接受你自己的答案,抓住这些点。
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')