Захват веб-камеры - PullRequest
       47

Захват веб-камеры

2 голосов
/ 22 ноября 2011

Как вопрос здесь Состояния, я пытаюсь захватить изображение с моей веб-камеры. Я работаю под управлением Windows 7 (bootcamp) и подключил камеру, как показано на следующем снимке экрана.

Screen shot showing devices

Но по какой-то причине я не могу заставить работать следующий код (это ссылка , приведенная в другом вопросе):

Capture capture = new Capture(CaptureType.ANY); //fezzes on this line
viewer.Image = capture.QueryFrame();

Он умирает без того, чтобы рассказать мне что-нибудь о том, что произошло (после того, как я принудительно закрыл окно)

Ответы [ 2 ]

3 голосов
/ 22 ноября 2011

Ваш код выглядит сомнительным, взгляните на пример Cameracapture, поставляемый с EMGU. Сейчас я не знаю, откуда вы получаете CaptureType.ANY , но ваш код должен быть

Capture capture = new Capture(); 
viewer.Image = capture.QueryFrame();

.ссылка действительна и устарела (2009).

Вот слегка отредактированный код из примера, который вам понадобится:

private Capture _capture;

public YOUR_PROJECT()
{
    InitializeComponent();
    try
    {
        _capture = new Capture();
    }
    catch (NullReferenceException excpt)
    {
        MessageBox.Show(excpt.Message);
    }

    if (_capture != null)
    {
        Application.Idle += ProcessFrame;
    }
}


private void ProcessFrame(object sender, EventArgs arg)
{
    Image<Bgr, Byte> frame = _capture.QueryFrame();
    Picturebox1.Image = frame.ToBitmap(); //Display image in standard Picture Box
}

Вам нужно только добавить переменную в Capture capture = new Capture () вызов метода, если у вас более одной камеры или если вы читаете из видеофайла

//For example if I had two video Cameras
Capture capture = new Capture(0); //CAM1
Capture capture = new Capture(1); //CAM2

//For a Video File
Capture capture = new Capture(@"C:/..../Myvideofile.avi"); 

Надеюсь, это поможет вамЕсли нет, попробуйте использовать USB-камеру, чтобы убедиться, что EMGU (OpenCV) не может получить доступ к устройству.

Приветствия,

Крис

0 голосов
/ 19 января 2012

Попробуйте:

_capture = new Capture(Emgu.CV.CvEnum.CaptureType.DSHOW);

Это прекрасно работает для меня.

...