如何挂钩摄像头捕获?

时间:2009-06-26 15:29:33

标签: c++ visual-c++ webcam

我正在开发一款当前版本具有网络摄像头定制设备驱动程序的软件,我们将此驱动程序与我们的软件一起使用,在显示之前更改捕获图像,与YouCam非常相似。

基本上,当任何使用网络摄像头的应用程序启动时,我们的驱动程序会在显示之前在框架中运行处理。

问题是总是安装了“2”网络摄像头,真正的网络摄像头和我们的自定义驱动程序。

我注意到YouCam做了我们需要的,也就是说,在任何安装的网络摄像头中挂钩一些方法,它会在显示之前处理每一帧。

有谁知道怎么做?

我们使用VC ++。

由于

4 个答案:

答案 0 :(得分:2)

正如bkritzer所说,OpenCV很容易做到你想要的。

IplImage  *image = 0;   // OpenCV type
CvCapture *capture = 0; // OpenCV type

// Create capture
capture = cvCaptureFromCAM (0);
assert (capture, "Can't connect webcam");

// Capture images
while (stilCapturing)
{
    // Grab image
    cvGrabFrame (capture);
    // Retrieve image
    image = cvRetrieveFrame (capture);
    // You can configure refresh time
    if (image) cvWaitKey (refreshTime);
    // Process your image here
    //...
}

您可以将这些OpenCV调用封装到C ++类中,并为其专门设置一个特定的线程 - 这些将是您的驱动程序。

答案 1 :(得分:1)

我认为YouCam使用DirectShow transform filter。这就是你需要的吗?

答案 2 :(得分:1)

查看OpenCV个库。它有一堆教程示例和库,可以满足您的要求。安装起来有点困难,但我之前已经开始工作了。

答案 3 :(得分:0)

嗯,我认为这个问题中有两个被误解的关键概念:

1)如何挂钩网络摄像头捕获
2)... 使用网络摄像头的任何应用程序...

如果我理解正确,OpenCV对于编写您自己的完整应用程序非常有用,完全意味着它将打开相机并处理图像。所以它不会满足第2点,我理解为指的是打开相机的其他应用程序(不是你的!),以及处理图像的应用程序。

第1点)似乎证实了这一点,因为“钩子”这个词通常意味着拦截一些不属于你自己的应用程序的其他过程。 所以我怀疑这个问题是否得到了回答。我也对此感兴趣。