网络摄像头捕获

时间:2011-11-22 03:21:13

标签: c# webcam emgucv

问题为here个州,我正在尝试用我的网络摄像头拍摄图像。我正在运行Windows 7(bootcamp)并连接了一个摄像头,如下面的屏幕截图所示。

Screen shot showing devices

但由于某些原因,我似乎无法使用以下代码(它来自另一个问题中给出的link):

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

它没有告诉我发生了什么(在我强行关闭窗口之后)

2 个答案:

答案 0 :(得分:3)

您的代码看起来有问题看看EMGU提供的Cameracapture示例我现在没有从 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)无法访问设备发生冲突。

干杯,

克里斯

答案 1 :(得分:0)

试试这个:

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

这对我很有用。