2013-08-22 67 views
0

這可能是一個開放式問題。我已經編寫了一個opencv應用程序,用於捕獲連接到計算機的兩臺外部攝像頭的供稿。兩個攝像頭的捕捉在兩個不同的線程上並行運行。該錄像機模塊將幀寫入到稍後處理的視頻文件中。下面的代碼位於每個線程函數內部:使用opencv瞭解攝像頭捕獲率

CvCapture *capture =cvCaptureFromCAM(indexOfCamera); 
    if(!capture) return; 

    CvSize sz =cvGetSize(cvQueryFrame(capture)); 
    cvNamedWindow("src"); 
    CvVideoWriter *writer =cvCreateVideoWriter((char*) p, CV_FOURCC('L','A','G','S'), 20, sz); 
    if(!writer) { 
     cvReleaseCapture(&capture); 
     return; 
    } 
    IplImage *frame; 
    int frameCounter =0; 
    while(true){ 
     QueryPerformanceCounter(&sideCamCounter); 
     frame =cvQueryFrame(capture); 
     if(!frame)break; 
     //Store timestamp of frame somewhere 
     cvShowImage("src", frame); 
     cvWriteFrame(writer, frame); 

     int c=cvWaitKey(1); 
     if((char)c ==27)break; 
     ++frameCounter; 
    } 
    cvReleaseVideoWriter(&writer); 
    cvReleaseCapture(&capture); 
    cvDestroyAllWindows(); 

兩個相機我使用是:A - 羅技球AF攝像頭 - 筆記本電腦和B微軟HD-6000 LifeCam的。相機A以大約16-20fps的速度拍攝(在幾次拍攝中可達到30fps),相機B以10-12fps的速度拍攝。

我需要更快的捕捉速率來捕捉實時動作。我知道我會受到相機捕捉速度/速率的限制,但除此之外,還有哪些其他因素會影響捕捉速率 - 例如加載系統(內存和CPU),API的使用?我願意探索各種選擇。謝謝。

回答

1
  1. 嘗試設置不同的攝像頭屬性 - http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-set,可能是最有趣的,你會... FPS :)注意,它並不總是工作正常(How to set camera FPS in OpenCV? CV_CAP_PROP_FPS is a fake),但給它一個機會,也許它會幫你。你也可以嘗試設置較小的圖像分辨率。

  2. 如果您不必 - 不顯示圖像。

  3. 您可能試圖抓住一個線程中的幀並在另一個線程中進行處理。
  4. 將相機直接連接到電腦 - 請勿使用USB集線器。
  5. API的使用

我不認爲這會有所幫助,但如果你願意,你可以嘗試使用不同的API - OpenCV on Mac is not opening USB web camera

+0

感謝您的幫助。我嘗試了所有的東西,但沒有一個會影響捕獲率。 –