Веб-камеры, C # и надежная обертка - PullRequest
4 голосов
/ 03 февраля 2012

Я остро нуждаюсь в замене оболочки, используемой в приложении C #. По сути, нам нужно прикрепить канал веб-камеры к одному из двух графических блоков. Это будет использоваться для съемки неподвижных изображений одним нажатием кнопки, которая может отсоединить подачу камеры и прикрепить неподвижное изображение к этой графической коробке, а затем снова установить подачу камеры. Ранее мы нашли некоторый бесплатный код для использования с файлом CaptureDevice.cs и Pinvoke.dll, чтобы связать его с avicap32.dll. К сожалению, это, кажется, случайные, прерывистые ошибки, которые не могут быть надежно воспроизведены. Это просто слишком ненадежно. В какой-то случайной точке один из этих графических блоков может стать черным и не будет показывать канал, пока не будет сделан снимок, после чего правильное изображение будет прикреплено к графическому блоку. Затем, даже если к нему подключена только одна веб-камера, она будет постоянно запрашивать выбор веб-камеры, а в противном случае она не будет делать.

Откровенно говоря, я удивлен и встревожен тем, что Microsoft не включила ничего в .NET для покрытия видеопотоков с веб-камеры. Я ищу что-то надежное и относительно простое в реализации для замены этой глючной системы веб-камеры.

Ответы [ 3 ]

1 голос
/ 03 февраля 2012

Могу ли я предложить

http://www.emgu.com/wiki/index.php/Main_Page

Я использовал OpenCV во многих библиотеках C ++, и, похоже, он отлично работает для веб-камер из других вещей, которые я пробовал.Emgu - это просто оболочка на C # для OpenCV.

Вот пример проекта, который можно опробовать.Он очень простой и простой, но должен работать сразу.

http://dl.dropbox.com/u/18919663/vs%20samples/OpenCVCSharpTest.zip (только что загружен)

Образец:

using Emgu.CV;
using Emgu.CV.Structure;
...

public partial class Form1 : Form
{
    public Capture cvWebCam;
    public Form1()
    {
        InitializeComponent();

        try
        {
            cvWebCam = new Capture();
            timer1.Start();
        }
        catch
        {
            Console.WriteLine("Default camera not found or could not start");
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (cvWebCam != null)
        using (Emgu.CV.Image<Bgr, byte> frame = cvWebCam.QueryFrame())
        {
            pictureBox1.BackgroundImage = frame.ToBitmap();
        }
    }
}
0 голосов
/ 22 января 2018

Настало время использовать MediaCapture объект. Используйте этот пример для MS Windows 10 https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CameraStarterKit/

А также прочитайте эту статью http://www.codepool.biz/csharp-camera-api-video-frame.html

0 голосов
/ 03 февраля 2012

Попробуйте DirectShow.net - это бесплатная библиотека-оболочка для доступа к функциям DirectShow из .NET: http://directshownet.sourceforge.net

Его примеры кода также содержат пример приложения для захвата видео с веб-камер: http://sourceforge.net/projects/directshownet/files/DirectShowSamples/

...