如何挂钩网络摄像头捕获?
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) 点似乎证实了这一点,因为“钩子”这个词通常表示拦截不属于您自己的应用程序的其他一些进程。 所以我怀疑这个问题是否得到回答。我也很感兴趣。
【讨论】:
以上是关于如何挂钩网络摄像头捕获?的主要内容,如果未能解决你的问题,请参考以下文章