2011-08-12 62 views
10

如何設置相機FPS?可以是 cvSetCaptureProperty(cameraCapture,CV_CAP_PROP_FPS,30); ?如何在OpenCV中設置攝像頭FPS? CV_CAP_PROP_FPS是假的

但它返回 HIGHGUI ERROR:V4L2:無法獲取屬性(5) - 無效參數

因爲在highgui/cap_v4l.cpp沒有實現

static int icvSetPropertyCAM_V4L(CvCaptureCAM_V4L* capture, 
            int property_id, double value){ 
    static int width = 0, height = 0; 
    int retval; 

    /* initialization */ 
    retval = 0; 

    /* two subsequent calls setting WIDTH and HEIGHT will change 
     the video size */ 
    /* the first one will return an error, though. */ 

    switch (property_id) { 
    case CV_CAP_PROP_FRAME_WIDTH: 
     width = cvRound(value); 
     if(width !=0 && height != 0) { 
      retval = icvSetVideoSize(capture, width, height); 
      width = height = 0; 
     } 
     break; 
    case CV_CAP_PROP_FRAME_HEIGHT: 
     height = cvRound(value); 
     if(width !=0 && height != 0) { 
      retval = icvSetVideoSize(capture, width, height); 
      width = height = 0; 
     } 
     break; 
    case CV_CAP_PROP_BRIGHTNESS: 
    case CV_CAP_PROP_CONTRAST: 
    case CV_CAP_PROP_SATURATION: 
    case CV_CAP_PROP_HUE: 
    case CV_CAP_PROP_GAIN: 
    case CV_CAP_PROP_EXPOSURE: 
     retval = icvSetControl(capture, property_id, value); 
     break; 
    default: 
     fprintf(stderr, 
       "HIGHGUI ERROR: V4L: setting property #%d is not supported\n", 
       property_id); 
    } 

    /* return the the status */ 
    return retval; 
} 

如何解決呢?

回答

6

我不知道這是否仍然有效,但前一段時間,像一年半的事情,我遇到了這個問題。我與OpenCV的開發人員聯繫,他告訴我,改變捕捉屬性的訪問權限和能力尚未實現,而其他一些功能僅適用於某些類型的相機。我終於看到了 libdc1394(在linux中工作),並且做了一些將libdc1394檢索到的數據從OpenCV轉換爲IplImages的函數。這不是一項艱鉅的任務。

+0

我確定地說,並非所有相機都支持所有的操作。 –

+0

我從來沒有說過,我只是告訴我的經驗和我是如何解決類似的問題。 –

+0

這是真的,但我有一個羅技c920和該相機不支持所有操作。我只是想支持你的說法「其他只是爲某些類型的相機」:),相關http://stackoverflow.com/questions/16432676/cant-access-properties-of-cvvideocapture-with-logitech-c920 –

3

檢查opencv2.4手冊出去,視頻拍攝的是比以前好多了,

- >設置(CV_CAP_PROP_FPS,30);對我的作品大部分時間。 但效率有點低。

以防萬一您可能不喜歡新的opencv2.4並仍想控制您的相機。在這裏檢查videoinput lib。它運行良好並使用directshow功能。使用了OpenCV的Python包裝 http://www.aishack.in/2010/03/capturing-images-with-directx/ http://www.muonics.net/school/spring05/videoInput/

7

,它的工作對我來說,指的是變量:

cap = cv2.VideoCapture(1) 
cap.set(cv2.cv.CV_CAP_PROP_FPS, 60) 

我使用python 2.7.3和OpenCV 2.4.8

相機的PS3眼

+1

我正在使用python 3.5.2和ps3 eye以及opencv 3.2.0-dev和linux,並且這種方法適用於我。不過,這個常量的名字似乎已經變成了CAP_PROP_FPS。 –

+0

您也可以將它設置爲187 fps:D(如果通過CAP_PROP_FRAME_WIDTH/HEIGHT設置低分辨率320x240) –

3

CV_CAP_PROP_FPS是不是假的。請參閱OpenCV github回購中的cap_libv4l.cpp(1)。關鍵是要確保在配置OpenCV時使用libv4l over v4l。爲此,運行cmake的前,安裝libv4l-dev的

sudo apt-get install libv4l-dev 

現在同時用cmake的配置OpenCV的,啓用選項,WITH_LIBV4L。如果一切進展良好,在配置狀態,你會看到一些類似的事情下面

V4L/V4L2: Using libv4l1 (ver)/libv4l2 (ver)

然後同時建立你的OpenCV的代碼,你將有libv4l1/libv4l2/libv4lconvert鏈接。

您選擇的分辨率下的任意FPS值無需您的攝像頭支持。您可以使用像奶酪這樣的圖形工具或像lsusb這樣的命令來檢查支持的分辨率/ fps(2

+1

在Ubuntu 12.04上爲我工作OpenCV 3.0.0。安裝libv4l-dev後,我重新執行了我的[原始cmake](http://stackoverflow.com/a/29238291/1628638)(默認情況下啓用了「WITH_LIBV4L」),並且鏈接沒有任何改變就可以工作。獲取和設置CV_CAP_PROP_FPS現在適用於我的LifeCam電影院。 –

+1

'v4l2-ctl -d 0 --list-formats-ext'列出了每個像素格式(例如,'MJPG')和分辨率所支持的幀速率。對於我的LifeCam電影院,MJPG和640x480,我可以設置30fps,但在我的OpenCV「相機查看器」代碼中僅測量15fps。 –

+0

這也意味着它可能無法在一些已編譯的版本中,或在不同的平臺(如Windows)上工作。 –