Я использую две темы:
поток 1 - это тот, который берет кадры с камеры и обрабатывает их
поток 2 отображает их с помощью cvshowimage
Во втором потоке я использую cvWaitKey (200); (я пробовал и другие значения ..)
Проблема в том, что показываются первые изображения, но через некоторое время их уже нет (такая же ситуация возникает при попытке переместить окно.
Он зависает и иногда изображение становится пустым ..
Есть идеи, как решить эту проблему?
Edit:
когда я показываю изображения в теме, я теряю кадры. Это должно быть нормально?
Edit2:
Я попытался также визуализировать в потоке 2 более старых кадра вместо нового, но с тем же выводом.
Edit3:
Это то, что я делаю более или менее:
void *showImages( void *ptr )
{
bool showit = false;
while (!MainThreadHasFinished)
{
pthread_mutex_lock( &mutex1 );
if(ImageGenerated = true)
showit = true;
else
showit = false;
pthread_mutex_unlock( &mutex1 );
showit = true;
if(showit == true)
cvShowImage( "RGB Image", RGBImage);
cvWaitKey(500);
}}
IplImage *RGBImage;
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
bool ImageGenerated;
int main(int argc, char** argv)
{
//init camera and other stuff
int frameCounter=0;
RGBImage = cvCreateImage( cvSize(RGB_RES_X,RGB_RES_Y),8,3);
int iret1 = pthread_create( &showImagesThread, NULL, showImages, (void*) message1);
for (;;) {
pthread_mutex_lock( &mutex1 );
ImageGenerated = false;
pthread_mutex_unlock( &mutex1 );
//get frame here in showImg
frameCounter++;
if(frameCounter == 10) frameCounter=0;
if(frameCounter == 2)
cvCopy(&showImg,RGBImage);
pthread_mutex_lock( &mutex1 );
ImageGenerated = true;
pthread_mutex_unlock( &mutex1 );
//other stuff
}
}
Приветствия