numy array IndexError: индекс выходит за пределы оси 0 с размером 1080 - PullRequest
1 голос
/ 11 мая 2019

Я пытаюсь перебрать пиксели изображения, точнее снимок экрана, который я получаю через модуль ImageGrab.Вот мой код:

from PIL import ImageGrab as ig
import numpy as np
from pynput.mouse import Controller
from pynput.keyboard import Key
from pynput import keyboard

mouse= Controller()

def onpress(key):

    try:
        pressed_key= key.char
    except AttributeError:
        pressed_key= str(key)[4:]

    if pressed_key == 'esc':
        print('Quitting process')
        return False

    elif pressed_key == 'space':
        mousepos= mouse.position
        pic= ig.grab()

        arr= np.array(pic)

        print(f'Pixel color at {mousepos}: RGB{arr[mousepos]}')
        # here the error is raised

with keyboard.Listener(on_press= onpress) as listener:
    listener.join()

Я хочу проверить цвет RGB пикселя в позиции мыши при нажатии пробела.Он отлично работает для «левого верхнего» пикселя, вот несколько примеров вывода:

1) Pixel color at (150, 193): RGB[242 243 244]
2) Pixel color at (579, 302): RGB[0 0 0]
3) Pixel color at (887, 108): RGB[145 89 4]

, но когда я немного двигаю мышь в правом нижнем углу экрана (из центра просточуть-чуть внизу справа) возникает такая ошибка:

    Traceback (most recent call last):
  File "imagegrab.py", line 64, in <module>
    listener.join()
  File "C:\Users\marca\Anaconda3\lib\site-packages\pynput\_util\__init__.py", line 199, in join
    six.reraise(exc_type, exc_value, exc_traceback)
  File "C:\Users\marca\Anaconda3\lib\site-packages\six.py", line 692, in reraise
    raise value.with_traceback(tb)
  File "C:\Users\marca\Anaconda3\lib\site-packages\pynput\_util\__init__.py", line 154, in inner
    return f(self, *args, **kwargs)
  File "C:\Users\marca\Anaconda3\lib\site-packages\pynput\keyboard\_win32.py", line 237, in _process
    self.on_press(key)
  File "C:\Users\marca\Anaconda3\lib\site-packages\pynput\_util\__init__.py", line 75, in inner
    if f(*args) is False:
  File "imagegrab.py", line 42, in onpress
    print(f'{count}) Pixel color at {mousepos}: RGB{arr[mousepos]}')
IndexError: index 1152 is out of bounds for axis 0 with size 1080

Эта ошибка НЕ ​​возникает, если я загружаю изображение, используя

pixels= pic.load()
print(f'{count}) Pixel color at {mousepos}: RGB{pixels[mousepos]}')

, что прекрасно работает (здесьЯ указывал на верхний левый и нижний правый углы экрана):

1) Pixel color at (0, 0): RGB(56, 36, 12)
2) Pixel color at (1914, 1016): RGB(22, 15, 5)

Я думаю, что это как-то связано с DPI экрана моего ноутбука, так как ранее мне приходилось применять исправление, которое былопредложил в этом потоке Github , поскольку у меня была такая проблема с захватом экрана.

Индекс массива, показанный в ошибке (1152), как вы можетеВидите, переполняет обычное разрешение HD-экранов 1920x1080.Я понятия не имею, что нужно сделать, чтобы это исправить, поэтому я надеюсь, что мне все ясно, и кто-то может мне помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...