shimat / opencvsharp

OpenCV wrapper for .NET

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Different open cameras depending on the videoCaptureApi used

P4TTT0 opened this issue · comments

Issue

I'm trying to initialize my camera with VideoCapture by passing the camera index and the videoCaptureApi. The issue is that depending on the VideoCaptureApi, the camera index points to one camera or another. Why does this happen and how could it be resolved?

Environment

  • Operating System: Windows 11 Pro
  • Development Environment: Visual Studio 2022
  • Dependencies:
    • DirectShowLib (1.0.0)
    • OpenCvSharp4.Windows (4.9.0.20240103)
  • Cameras:
    • Microsoft LifeCam Cinema
    • ELP-USBFHD06H-BL36

Example code:

DsDevice[] devices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);

if (devices.Length == 0)
{
    Console.WriteLine("No se encontraron dispositivos de captura de video.");
    return;
}

DsDevice webcam = devices[0];
Console.WriteLine($"Usando la webcam: {webcam.Name}");
using VideoCapture capture = new VideoCapture(0);

if (!capture.IsOpened())
{
    Console.WriteLine("No se pudo abrir la webcam.");
    return;
}

using (Window window = new Window("Webcam"))
{
    while (true)
    {
        Mat frame = new Mat();
        capture.Read(frame);

        window.ShowImage(frame);

        int key = Cv2.WaitKey(30);
        if (key == 27) 
            break;
    }
}

Using

using VideoCapture capture = new VideoCapture(0, VideoCaptureAPIs.ANY);

Output

Opened Camera: ELP-USBFHD06H-BL36

Using

using VideoCapture capture = new VideoCapture(0, VideoCaptureAPIs.DSHOW);

Output

Opened Camera: Microsoft LifeCam Cinema