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 и расширяю дисплей с помощью внешнего монитора, обрезка искажается, как показано на снимке экрана.

Другие вопросы по тегам