我正在开发一款当前版本具有网络摄像头定制设备驱动程序的软件,我们将此驱动程序与我们的软件一起使用,在显示之前更改捕获图像,与YouCam非常相似。
基本上,当任何使用网络摄像头的应用程序启动时,我们的驱动程序会在显示之前在框架中运行处理。
问题是总是安装了“2”网络摄像头,真正的网络摄像头和我们的自定义驱动程序。
我注意到YouCam做了我们需要的,也就是说,在任何安装的网络摄像头中挂钩一些方法,它会在显示之前处理每一帧。
有谁知道怎么做?
我们使用VC ++。
由于
答案 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点)似乎证实了这一点,因为“钩子”这个词通常意味着拦截一些不属于你自己的应用程序的其他过程。 所以我怀疑这个问题是否得到了回答。我也对此感兴趣。