OpenCV Изображение застряло - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь сделать небольшую программу с opencv. По сути, он должен показывать изображение пользователю, затем закрывать его (или лучше позволить ему открыться, но это еще одна проблема, потому что я сейчас не знаю, как выполнить код, позволяя открыть картинку), а затем спросить пользователя, что он только что видел. Для этого я использую imshow и waitKey. Все работает хорошо, но картинка не закрывается после нажатия клавиши. Это застряло. Я думаю, потому что после этой команды еще один код для выполнения?

Я думаю, потому что после этой команды выполняется другой код?

импорт cv2

oriimg = cv2.imread('path')
img = cv2.resize(oriimg,(360,480))
solutionimg = "Answer"
cv2.imshow('Test', img)
cv2.waitKey(0)
input("What can you see here?")


if input==solutionimg:
    cv2.destroyAllWindows()
    print("Right!")
else:
    cv2.destroyAllWindows()
    print("Wrong")

1 Ответ

1 голос
/ 17 апреля 2019

waitKey не закрывает окна, оно останавливает программу на указанное время. Это также необходимый шаг для отображения изображения.
Для ваших целей вы можете использовать cv2.waitKey(1). Это отображает изображение, а затем запрашивает ввод без необходимости сначала нажимать клавишу. Окно изображения не закроется.

Если вы хотите закрыть изображение перед запросом, вы можете использовать cv2.destroyWindow([window_name]), чтобы закрыть определенное окно.
В вашем случае это cv2.destroyWindow('Test').

Документация: destroyWindow , waitkey

При просмотре вашего кода есть еще 2 проблемы:
cv2.imread('path') «путь» необходимо заменить на путь изображения. Это относительно сценария, поэтому, если изображение находится в той же папке, тогда будет достаточно «[image_name] .jpg» (или .png, ect), но полный путь всегда работает.
Вам нужно сохранить результат input("What can you see here?") в переменной. См. Реализацию в примере кода.

Пример кода, который работает для меня:

    import cv2

    img = cv2.imread('image.jpg')
    solutionimg = "Answer"
    cv2.imshow('Test', img)
    cv2.waitKey(0)
    test = input("What can you see here?")

    if test == solutionimg:
            cv2.destroyAllWindows()
            print("Right!")
    else:
            cv2.destroyAllWindows()
            print("Wrong")

Этот код читает и показывает изображение. Когда вы нажимаете клавишу, она предлагает использовать для ввода. Нажмите на терминал, чтобы ввести ответ. После нажатия кнопки ввода окно изображения закрывается и отображается правое / неправильное.

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