我使用两个线程:清爽问题,使用的OpenCV线程
线程1是一个从相机拍摄的帧并处理它们 线程2是使用cvshowimage
它们显示在一个在我使用cvWaitKey(200)的第二个线程中; (我也试过其他值..)
问题是,第一个图像显示,但一段时间后,他们不再是(当你尝试移动窗口时发生相同的情况 它冻结,有时图像变为空白..
任何想法如何,我可以解决这个问题
编辑:?? 当我告诉在线程图片我失去帧它应该是正常
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
}
}
干杯
怎么了这条线“if(ImageGenerated = true)”?你想要“==”而不是“=”? – johnnycrash 2011-04-12 04:38:56
这是在Win平台上吗?你用过pthreads-win32吗? – coder9 2011-11-16 20:22:09