2016-10-02 81 views
0

我想通過linux上的opencv獲取Minoru立體攝像頭的圖像對。 當我強迫低分辨率它工作正常:Opencv立體攝像頭捕獲和幀率限制

left = cv2.VideoCapture(0) 
left.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 320) 
left.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 240) 
right = cv2.VideoCapture(0) 
right.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 320) 
right.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 240) 

while True: 
    _, left_img = left.read() 
    _, right_img = right.read() 
    ... 

不過,我使用的圖像創建深度圖,和更大的分辨率將是一件好事。但如果我嘗試保留默認,或迫使分辨率爲640x480,我擊球失誤:

libv4l2:在流轉彎錯誤:設備上沒有剩餘空間

我看了一下USB帶寬侷限性,但:

  • 這發生在(右起第一次讀())第一次迭代
  • 我不需要任何接近60甚至30 FPS,但未能成功地減少了「請求FPS」通過VideoCapture參與(如果這是有道理的)
  • 加入睡覺似乎沒有幫助,甚至在左/右之間讀取
  • 奇怪的是,如果我做了很多處理(在while循環中),我開始注意到「lag」:事物在現實世界中發生的事情會在閱讀過的圖片後顯示很久。這表明,實際上有一個緩衝的地方,可以和確實積累幾個圖像(很多)

我試圖創建和釋放爲每個圖像讀取單獨VideoCapture的解決方法,但這是慢了一點總體而言(< 1FPS),更重要的是,圖像在進行立體匹配時太多不同步。

我試圖理解爲什麼這會失敗,爲了找到解決辦法。看起來v4l正在分配一個單獨的全局太小的緩衝區,以某種方式被2個捕獲對象使用。 任何幫助,將不勝感激。

回答