2015-05-17 3 views
0

Im development c++ приложение там я использовал boost, opencv. и создать поток boost и вызвать функцию внутри этого потока. функция имеет opencv imread (я проверял использование cvLoadimage, но получил тот же результат), но программа не может завершить и запрограммировать выход.C++ opencv изображение не отображается внутри форсированной нити

пожалуйста, найти ниже код, я использовал

boost::thread *thread_reconstruct; 

    int main(int argc, const char** argv) 
    { 

     thread_reconstruct = new boost::thread( &FuncCreate ); 

     return 0; 

    } 

    void FuncCreate() 
    { 
     while (true) 
     { 
      compute_left_descriptors(g_nameRootFolder.c_str()); 
    } 

    } 

    void compute_left_descriptors(const char* name_dir) 
    { 

     char namebuf[1024]; 


      sprintf(namebuf, "%s/Left/%04d_left.bmp", name_dir, 1); 

     // Program ended with exit code: 0 programe exit from here. 
     Mat input_left = imread(namebuf, CV_LOAD_IMAGE_COLOR); 

     imshow("Right View", input_left); 
     waitKey(0); 

     printf("done\n"); 
    } 
+1

ваше название говорит, что вы хотите, чтобы отобразить изображения, но ваш Doesnt использовать imshow? – Micka

+0

@ Микка извините, я ошибаюсь. теперь я сказал. все еще была та же проблема. – VenushkaT

+0

@berak Я проверил с waitkey (0), чтобы применить преобразование. но результаты - это одни и те же программные выходы из Mat input_left = imread (namebuf, CV_LOAD_IMAGE_COLOR); линия . Есть идеи ? – VenushkaT

ответ

1

пожалуйста, попробуйте эту версию кода и скажите нам, работает ли он или нет

boost::thread *thread_reconstruct; 

int main(int argc, const char** argv) 
{ 

    cv::namedWindow("Right View"); // this will create a window. Sometimes new windows can't be created in another thread, so we do it here in the main function. 

    thread_reconstruct = new boost::thread( &FuncCreate ); 

    thread_reconstruct->join(); // this will make your program wait here until the thread has finished processing. Otherwise your program would exit directly. 

    return 0; 

} 

void FuncCreate() 
{ 
    while (true) 
    { 
     compute_left_descriptors(g_nameRootFolder.c_str()); 
    } 
} 

void compute_left_descriptors(const char* name_dir) 
{ 

    char namebuf[1024]; 


     sprintf(namebuf, "%s/Left/%04d_left.bmp", name_dir, 1); 

    // Program ended with exit code: 0 programe exit from here. 
    Mat input_left = imread(namebuf, CV_LOAD_IMAGE_COLOR); 

    if(input_left.empty()) printf("could not load image\n"); 

    imshow("Right View", input_left); 
    waitKey(0); // if you dont want to press a key before each new image, you can change this to waitKey(30); 

    printf("done\n"); 
} 
+1

спасибо, что он работает. – VenushkaT