2012-04-20 292 views
2

我目前正在使用OpenCV編寫一個實時應用程序,並且在以下情況下: 我試圖從插入FireWire 800的HDV攝像頭捕獲圖像。 我試圖循環cvCaptureFromCam上使用的索引, 但沒有找到相機(網絡攝像機除外)。OpenCV從外部攝像頭捕獲

有我的代碼示例,它循環的指數(0逃逸導致它的攝像頭的指標):

CvCapture* camera; 
int index; 
for (index = 1; index < 100; ++index) { 
    camera = cvCaptureFromCAM(index); 
    if (camera) 
     break; 
}  
if (!camera) 
    abort(); 

在它停止關於中止任何時候。

我編譯在OSX 10.7和我已經測試:

  • OpenCV的1.2私有框架
  • OpenCV的2.0私有框架(在這裏找到:OpenCV2.0.dmg)。
  • OpenCV的由我自己(編譯版本2 )

我知道問題已經知道,並且有很多關於此問題的討論,但我無法找到任何解決方案。

有沒有人有過相同的情況?

問候。

+0

你能發佈你的代碼嗎? – 2012-04-20 14:33:49

+0

我在編輯中發佈了一些代碼。 有關信息,我的相機是Sony HDV-HC1E。它使用了一個i-link,我已經嘗試了高清,DV和不同分辨率的輸出視頻。 – muxisar 2012-04-20 14:58:03

+0

試試這個代碼,它可能有幫助:http://pastebin.com/i0Kb2xNv 這是從@juanchopanza它是一個攝像頭,但我希望它可以幫助 – user1347945 2012-04-23 19:40:11

回答

2

index應該從開始0而不是。

如果這樣不起作用,OpenCV可能不支持您的相機。我建議你檢查它是否在compatibility list

+0

感謝您的幫助, 據我所知,索引從0開始,但這是我的攝像頭的索引,我想跳過它並拿到我的FireWire攝像頭。 我也嘗試過索引-1(任何相機),但效果是一樣的:網絡攝像頭被找到,而不是我的火線攝像頭。 – muxisar 2012-04-20 16:39:35

+0

已更新的答案(刷新頁面)。 – karlphillip 2012-04-20 16:40:05

+0

很抱歉聽到這個消息。考慮通過點擊附近的複選框來接受我的答案,以便其他人可以從您的問題中受益。 – karlphillip 2012-04-20 16:45:09

6

要明確選擇火線,也許你可以嘗試添加300到你的索引?至少在OpenCV 2.4中,每種類型的相機都有一個特定的域。例如,Video4Linux被賦予域200,所以200是第一個V4L攝像機,201是第二個,等等。對於Firewire,域是300.如果指定的索引小於100,則OpenCV只是遍歷其中的每個域順序,這可能不是您所期望的順序。例如,它可能會首先找到您的網絡攝像頭,並且從未找到火線攝像頭。如果這不是問題,請接受我的意見。