OpenCV imshow() в цикле для отображения изображения

Я хотел бы создать программу на С++ с OpenCV, которая позволила бы мне постоянно запускать цикл, чтобы спросить пользователя, что делать с изображением. Например, пользователь может ввести определенное число для выполнения команды. Код, который у меня есть в качестве примера:

int main()
{
    int choose = -1;


    for (;;)
    {

    cin >> choose;

    if (choose == 0)
    {

        Mat img = imread(fileName1);//, CV_LOAD_IMAGE_GRAYSCALE); 

        if (!img.data)
        {
            cout << "Unable to load file." << endl;
        }
        else
        {
            namedWindow(fileName1, 1);
            imshow(fileName1, img);
        }
    }
    else if (choose == 1)
    {
        Mat img = imread(fileName2, CV_LOAD_IMAGE_GRAYSCALE);

        if (!img.data)
        {
            cout << "Unable to load file." << endl;
        }
        else
        {
            namedWindow(fileName2, 1);
            imshow(fileName2, img);
        }
    }
}


waitKey(0);

return 0;

}

Окно, в котором должно загружаться изображение, просто заполнено серым цветом. У меня нет проблем с загрузкой изображения, когда оно не находится в цикле. Может ли кто-нибудь помочь мне понять, почему это вызывает проблему, пожалуйста?

РЕДАКТИРОВАТЬ: Конечно, я забыл waitKey(0), хотя даже если бы он у меня был, когда я возвращаюсь к началу цикла, чтобы ввести число, открытое окно по какой-то причине падает.


person user3000392    schedule 22.11.2014    source источник
comment
вам нужен waitKey(); после imshow() (типичная ловушка нуба)   -  person berak    schedule 22.11.2014
comment
Я не уверен, но я думаю, что ваш waitKey не находится в цикле for, и вам нужно другое значение, например 0, например 10.   -  person Engine    schedule 22.11.2014
comment
waitKey() должен следовать за imshow().   -  person a-Jays    schedule 22.11.2014


Ответы (1)


Используйте waitKey для получения нажатой клавиши вместо cin. В качестве альтернативы, как сказано в комментариях, сделайте waitKey(1) после imshow.

person littleimp    schedule 23.11.2014