【问题标题】:How to hook webcam capture?如何挂钩网络摄像头捕获?
【发布时间】:2009-06-26 15:29:32
【问题描述】:

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

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

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

我注意到 YouCam 做了我们需要做的事情,即在任何已安装的网络摄像头中挂钩一些方法,该方法将在显示每个帧之前对其进行处理。

有人知道怎么做吗?

我们使用 VC++。

谢谢

【问题讨论】:

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


    【解决方案1】:

    正如 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++ 类中并为其指定一个特定线程——这些将是您的驱动程序。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        查看OpenCV 库。它有一堆教程示例和库,可以完全满足您的要求。安装有点困难,但我之前已经安装过了。

        【讨论】:

          【解决方案4】:

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

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

          如果我理解正确的话,OpenCV 对于编写您自己的完整应用程序很有用,完整的意思是它将打开相机并处理图像。所以它不能满足第 2 点),我理解它是指其他应用程序(不是你的!)打开相机,你的应用程序处理图像。 p>

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-08-18
            • 1970-01-01
            • 2013-02-09
            • 2015-04-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多