2016-05-06 5 views
-1

Я пытаюсь показать изображение на основе номера i вручную ввести [0 или 1], после чего он выбирает случайное изображение из 20 изображений в папке, которая будет показана. здесь кодimshow() не обновляет свой контент C++

stringstream ss; 
string fullfileName; 
int x; 
int pic = 0; 
namedWindow("MyWindow", CV_WINDOW_AUTOSIZE); 
while (1) 
{ 
    Mat img; 
    pic = 0; 
    cin >> x; 
    if (x == 0) 
    { 
     pic = rand() % ((10 - 1) + 1) + 1; 
    } 
    else if (x == 1) 
    { 
     pic = rand() % ((20 - 11) + 1) + 11; 
    } 


    ss << "C:/Users/abed/Desktop/Opencv/test/" << pic << ".jpg"; 
    ss >> fullfileName; 
    img = imread(fullfileName, CV_LOAD_IMAGE_UNCHANGED); 

    imshow("MyWindow", img); 
    char key = (char)waitKey(20); 
    if (key == 27) 
     break; 

} 
return 0; 

моя проблема заключается в следующем: imshow() визуализирует только первое изображение выбранного, независимо от того, новое значение Пути изображения. спасибо.

+0

Вы проверили, и вы уверены, что путь меняется? Кроме того, можно загружать все изображения? –

+0

Да, я поставил некоторый «cout», чтобы проверить, не изменились ли они, и все изменилось, путь к изображениям правильный, и все они могут быть загружены. Imshow() просматривает первый загруженный IMG и продолжает показывать его. –

ответ

2

stringstream не сбрасывает себя. Он будет добавлять новые значения в существующие. Я предлагаю вам либо сделать ss, либо fullfileName скопированные переменные, т. Е. Переместить их внутри цикла, ИЛИ сбросить переменную ss непосредственно перед текущей итерацией, например ss.str (""); ss.clear()

+0

Большое спасибо, он работал как шарм, когда я добавил ss.clear(); в конце цикла –

Смежные вопросы