图像索引超出范围,但不应该是

Posted

技术标签:

【中文标题】图像索引超出范围,但不应该是【英文标题】:Image index out of Range, except it shouldn't be 【发布时间】:2019-02-16 00:58:04 【问题描述】:

我正在设置一个需要截取特定窗口的屏幕截图的应用程序。我使用了一些我发现的代码来获取窗口的位置和大小,并且它似乎工作正常,根据第 26 行的输出它工作得很好。但是当我尝试从相应的 bbox(边界框)甚至 (1,1) 中获取任何像素时,即使窗口大小肯定大于 1,1,它也会输出 IndexError: image index out of range,正如第 26 行的输出所证明的那样。我该如何解决这个问题,为什么它似乎超出了范围?

import PIL.ImageGrab as IG
import win32gui
x = 0
y = 0
w = 0
h = 0
def callback(hwnd, extra):
    if win32gui.GetWindowText(hwnd) == "Window": #replace window with whatever you like for testing
        rect = win32gui.GetWindowRect(hwnd)
        global x
        global y
        global w
        global h
        x = rect[0]
        y = rect[1]
        w = rect[2] - x
        h = rect[3] - y

def main():
    win32gui.EnumWindows(callback, None)

if __name__ == '__main__':
    main()

print(x,y,w,h) #DEBUG
screen = IG.grab(bbox=(x,y,w,h))
print(screen.getpixel((1,1)))

【问题讨论】:

ImageGrab.grab(bbox) and Image.getpixel() Used together的可能重复 【参考方案1】:

我现在已经意识到问题所在了;边界框不是由 X Y 宽度和高度组成,而是由边界框左上角和右下角的坐标组成。这意味着边界框的大小是负数,因此出现了问题。

【讨论】:

以上是关于图像索引超出范围,但不应该是的主要内容,如果未能解决你的问题,请参考以下文章

当我使用单元格时索引超出范围(Swift)

Swift Firebase UISearchController 索引超出范围

索引 1 超出范围 [0..1) 图像

索引超出范围数据 nil swift 3

IndexError:在model.fit()中列出超出范围的索引

致命错误:TableView 中的数组索引超出范围