2009-06-26 82 views
2

我正在研究当前版本具有网络摄像头的自定义设备驱动程序的软件,并且我们将此驱动程序与我们的软件一起使用,它在显示之前更改捕获图像,与YouCam非常相似。如何挂接摄像头捕获?

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

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

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

有谁知道如何做到这一点?

我们使用VC++。

感谢

回答

1

查看OpenCV库。它有大量的教程示例和库,它们完全符合你的要求。安装有点困难,但我之前已经开始使用它。

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++类和奉献它的特殊话题 - 这些将是你的驱动程序。

0

嗯,我认为有这问题2个关键概念已经被人误解。

1)如何摄像头捕捉
2)......使用网络摄像头任何应用。 ..

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

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