如何挂钩网络摄像头捕获?

Posted

技术标签:

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

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

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

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

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

有人知道怎么做吗?

我们使用 VC++。

谢谢

【问题讨论】:

【参考方案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) 点似乎证实了这一点,因为“钩子”这个词通常表示拦截不属于您自己的应用程序的其他一些进程。 所以我怀疑这个问题是否得到回答。我也很感兴趣。

【讨论】:

以上是关于如何挂钩网络摄像头捕获?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用小程序从 Java 中的网络摄像头捕获视频?

如何从 http 网络摄像头直播中捕获图像

如何直接从 Web 应用程序中的内置网络摄像头捕获图像?

如何将多个 WebRTC 媒体流(屏幕捕获 + 网络摄像头)混合/组合成一个流?

使用图片框从网络摄像头捕获图像

如何在 OpenCV 中使用网络摄像头捕获 Mat 图像的像素值