PIL imagegrab(). Grab(). Crop(...) обрезает не заданные координаты
Я создаю холст, на котором рисую число. Затем я делаю скриншот через пакет Pillow и обрезаю его так, чтобы осталось только нарисованное число. (Цель состоит в том, чтобы предсказать нарисованное число через CNN) При обрезке снимка экрана, сделанного функцией Pillow imagegrab(). Grab(). Crop (...) не используются заданные координаты в .crop(). В целях тестирования я попытался вручную выбрать ту часть скриншота, которую нужно обрезать, задав координаты crop(). При этом он работает, если я выбираю верхний левый угол, но он становится более перекосом и перекосом, когда я перемещаю обрезанную часть вправо или ниже. В прикрепленном изображении вы можете увидеть пример обрезки, выполненной прикрепленным кодом, где была обрезана только часть холста, который нужно обрезать, дополнительно с некоторым фоном.
Код для обрезки части холста-виджета со скриншота:
def get_drawing():
widget = cv
x = root.winfo_rootx() + widget.winfo_x()
y = root.winfo_rooty() + widget.winfo_y()
x1 = x + widget.winfo_width()
y1 = y + widget.winfo_height()
ImageGrab.grab().crop((x, y, x1, y1)).save("test.png")
2 ответа
У меня была такая же проблема, но в моем случае в настройках Windows экран был масштабирован до 125%. После изменения его на 100% кроп стал правильным.
Я только что нашел ответ на свой вопрос: проблема заключалась в мониторе, который я выбрал для отображения своего холста. Я работаю с Microsoft Surface, подключенным к док-станции с внешним монитором. Когда я изменяю настройки дисплея, чтобы использовать только внешний монитор, обрезка работает с приведенным выше кодом, как и предполагалось. Когда я использую свой Surface и расширяю дисплей с помощью внешнего монитора, обрезка искажается, как показано на снимке экрана.