2016-05-06 7 views
-1

数字に基づいて画像を表示しようとしていますが、手動で[0または1]を入力してから、表示するフォルダの20画像から画像をランダムに選択します。のみにかかわらず、画像のパスの新たな価値を、選択した最初の画像をレンダリングする関数imshow(): はここimshow()does notはその内容を更新します。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; 

私の問題があるコードです。 ありがとうございます。

+0

パスが変更されていることを確認しましたか?また、すべての画像をロードできますか? –

+0

はい、私はいくつかの "cout"を入れて、変更があるかどうかを確認しました。すべて変更され、画像へのパスが正しいので、すべてのIMshow()ビューが読み込まれ、 –

答えて

2

stringstream自体はリセットされません。既存の値に新しい値を追加し続けます。 ssとfullfileNameスコープ付き変数をループ内で移動するか、ss.str( "")などの現在の繰り返しが終了する直前にss変数をリセットすることをお勧めします。 ss.clear()

+0

ありがとう、それはss.clear()を追加したときの魅力のように機能しました。ループの終わりに –