2012-03-10 12 views
1

현재 여러 개의 USB 웹캠에 액세스 할 수있는 응용 프로그램을 구축 중입니다. 컴퓨터에서 카메라 장치의 수를 계산할 수있는 방법이 없다는 것을 잘 알고 있습니다. 그러나 잘못된 인덱스로 카메라에 액세스하려고 할 때마다 검은 색 이미지가 나타납니다. 제한을 나타 내기 위해이 이미지를 사용할 수있는 방법이 있습니까?OpenCV 카운팅 카메라

예를 들어 두 개의 웹캠이 있습니다. 응용 프로그램은 인덱스 0에서 첫 번째 카메라에서 프레임을 검색하고 인덱스 1에서 두 번째 카메라에서 프레임을 검색합니다. 인덱스를 2로 증가 시키면 모든 제 3의 카메라가 연결되지 않아 검은 색 화면이 나타납니다.

지금까지 유일한 방법은 320x240 비트 맵의 ​​모든 픽셀에 액세스하여 흑백인지 확인하는 것입니다. 이것은 매우 효율적이지 않으므로 이것을 놓칠 다른 방법이 있습니다.

감사합니다.

답변

2

쉬운 방법은 ofVideoGrabber라는 클래스가 openFrameworks, 함께 갈 것입니다. listDevices() 방법을 사용하면 사용 가능한 모든 카메라를 나열하고 사용할 카메라를 선택할 수 있습니다.

다음으로 필요한 것 : ofxCvofVideoGrabber에 잡힌 이미지를 OpenCV 또는 그 밖의 처리를 위해 전송할 수있는 openFrameworks의 대체 OpenCV 래퍼입니다.

그래서 당신이 뭔가를 할 수 있습니다 :

// Inside Foo.h 
#include "ofxCv.h" 

// import namespaces for OpenCV & ofxCv 
using namespace cv; 
using namespace ofxCv; 

// vars we need 
ofVideoGrabber vidGrabber; 
ofImage inputImg; 
Mat matImg; 

// setup video grabber 
vidGrabber.setVerbose(true); 
vidGrabber.setDeviceID(1); // choose the right one via vidGrabber.listDevices() 
vidGrabber.initGrabber(320,240,false); 
int grabW = vidGrabber.width; 
int grabH = vidGrabber.height 

// grab current frame 
vidGrabber.grabFrame(); 
inputImg.setFromPixels(vidGrabber.getPixels(), 320, 240, OF_IMAGE_COLOR); 

// get cv::Mat 
matImg = toCv(inputImg).clone(); 

... further processing ... 

는 희망이 도움이!

+0

C#으로 작성된 것이 있습니까? OpenCv보다는 EmguCV를 사용하고 있습니다. –

+0

@ swift1691 나는 대답이 '아니오'라고 affraid하지만 C#으로 응용 프로그램을 작성하지는 않습니다 ... Btw : 제목이 잘못되었습니다! – dom