2011-09-15 183 views
3

我正在寫一個程序,從兩個攝像頭一次使用OpenCV捕獲(我沒有這樣做的立體視覺)。使用標準的OpenCV函數cvCaptureFromCAM()從兩個相同的攝像機中獲取捕獲圖像,並且在一個while循環(每次捕獲一次)中調用cvQueryFrame()兩次,最終我在兩個攝像機中獲得垃圾圖像,如我在cvNamedWindow中顯示的那樣。如果我在他們自己的POSIX線程(因此相同的地址空間)中運行每個攝像頭,我會在第二個線程中出現分段錯誤,爲此我找不出原因。多個攝像頭與OpenCV

最後,我可以在自己的過程中運行每個攝像頭(因此獨立的地址空間),一切運行良好。我懷疑是有某種鎖類型的資源必須在從不同的相機進行每幀查詢之前獲取。希望有人有一些想法,如何在同一進程和相同的線程中獲得兩個捕獲。謝謝!

+1

你可以發佈你試過的代碼嗎? –

回答

0

什麼是操作系統?

它非常依賴相機及其驅動程序 - 特別是在使用Directshow的窗口中,如果它們一起工作,如果您需要以特定順序或以某種方式啓動它們,它可能是完全的機會。

如果你能在單獨的線程中運行自己的相機,讓他們寫了一些中性的系統映像(命名管道,TCP套接字,在RAMDISK文件),你可能會發現,更可靠

0

對於每個線程使用COM庫時,您必須調用::CoInitializeEx(NULL,COINIT_MULTITHREADED)一次,並在完成捕獲工作時取消初始化它。

爲了在同一進程和同一線程中獲得兩個捕獲,是否爲cvQueryFrame()使用的緩衝區分配了一個副本?我懷疑你的兩個捕獲從cvQueryFrame()共享相同的緩衝區,這個緩衝區實際上由OpenCV本身維護!因此,請嘗試爲每個捕獲製作一份副本,看看它是否有效。

希望它有幫助!