我使用兩個線程:清爽問題,使用的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