Jeu de périphérique de capture EmguCV

Im en utilisant la classe Capture de EmguCV pour prendre des images à partir d'une WebCam.

Selon la documentation de la classe (http://www.emgu.com/wiki/files/2.0.0.0/html/18b6eba7-f18b-fa87-8bf2-2acff68988cb.htm), la Capture a 3 constructeurs.

À l'aide de public Capture() son supposé utiliser la valeur par défaut de la caméra et qu'il fonctionne correctement.

Comme je l'ai vu dans un des exemples, semble que

public Capture(string fileName) //takes a video file as the source for the captures.

Le dernier constructeur est

public Capture(int camIndex) //which is supposed to "Create a capture using the specific camera" 

J'ai essayé d'utiliser cette dernière constructeur afin de permettre à l'utilisateur de choisir l'appareil dans le cas où il a plus d'un appareil photo (par exemple, la caméra intégrée dans un ordinateur portable ou une caméra USB branché)

Mon problème est que je ne sais pas comment pour obtenir une liste des périphériques disponibles. Essayé de créer capte avec indice de 0 à 99 et essayer d'attraper un cadre attendre une exception, mais il faut juste une image noire avec le 100 captures. Aussi, lorsque j'utilise la valeur par défaut de la caméra, je ne sais pas comment pour obtenir son index.

Toute aide?

Edit: Avec l'info dans la réponse de la Shiva je l'ai eu à travailler avec cette (je l'ai poster pour de futures références):

private void onLoad(object sender, RoutedEventArgs e)
{
//Add the image processing to the dispatcher
this.Dispatcher.Hooks.DispatcherInactive += new EventHandler(dispatcherTimer_Tick);
//Get the information about the installed cameras and add the combobox items 
DsDevice[] _SystemCamereas = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
Video_Device[] WebCams = new Video_Device[_SystemCamereas.Length];
for (int i = 0; i < _SystemCamereas.Length; i++)
{
WebCams[i] = new Video_Device(i, _SystemCamereas[i].Name, _SystemCamereas[i].ClassID); //fill web cam array
ComboBoxDevices.Items.Add(WebCams[i].ToString());
}
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
if (capture != null)
{
//Capture an image
Image<Bgr, byte> img = capture.QueryFrame();
//Show the image in the window
ImageOriginal.Source = ImageProcessor.ToBitmapSource(img);
}
}
private void ComboBoxDevices_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//If there is already a capture, dispose it
if (capture != null)
{
capture.Dispose();
}
//Get the selected camera
int selectedDevice = ComboBoxDevices.SelectedIndex;
try
{
//Create new capture with the selected camera
capture = new Capture(selectedDevice);
}
catch (Exception excpt)
{
MessageBox.Show(excpt.Message);
}
}

OriginalL'auteur Evans | 2013-06-18