我正在C++中運行一個OpenCV程序,該程序讀取攝像頭圖像,然後執行一些操作。如果我讓它以最快速度運行,相機將以15 FPS的速度運行。我正在嘗試使用相機來調節FPS到我選擇的數量,如10 FPS。我正在使用計時器來完成此操作(timepec對象和clock_gettime()函數調用)。自行運行的時鐘工作正常,攝像頭本身運行良好,但是當我嘗試每隔100 ms自行抓取一幀時,程序將運行大約3秒鐘,然後完全凍結。這是我的代碼中的while循環:OpenCV程序在執行幾秒鐘後死機
/* Start the timer */
clock_gettime(CLOCK_REALTIME, &ts);
startBit = ts.tv_nsec;
/* Show the image captured from the camera in the window and repeat */
while (1) { // main while loop
clock_gettime(CLOCK_REALTIME, &ts);
endBit = ts.tv_nsec;
if (endBit-startBit >= 100000000) { // > 100 ms
fprintf(stderr, "%lu\n", endBit-startBit);
clock_gettime(CLOCK_REALTIME, &ts);
startBit = ts.tv_nsec; // reset timer
IplImage* frame = cvQueryFrame(capture); // Get one frame
Mat limage(frame); // convert IplImage to Mat
if (!frame) {
fprintf(stderr, "ERROR: frame is null...\n");
getchar();
break;
}
cvWaitKey(90);
}
}
該程序將打印到控制檯的時間已經過去。它現在設置的方式應該始終打印接近100毫秒(100000000納秒)的數據。但是控制檯每秒鐘給出一個奇怪的數字:18446744072800674356.正如我前面提到的,註釋掉相機圖像代碼,計時器可以自行工作(它仍然會打印出那麼大的數字,但它會永遠運行)。如果我註釋掉計時器代碼,攝像機將以15 FPS運行,沒有問題。但是,當我將代碼一起運行時,約3秒後會凍結。任何幫助表示讚賞!
請問,如果你把'cvWaitKey(90),它的工作'權的if語句之外? (請參閱http://opencv.willowgarage.com/wiki/documentation/c/highgui/WaitKey) – 2013-03-12 17:44:55
不,它的行爲與if語句內部或外部的cvWaitKey()相同。 – keithbhunter 2013-03-12 19:28:34