如何使用OpenCV让用户选择视频录制设备(网络摄像头)?

7
我需要的是类似于“捕获设备列表”的东西,还需要一些函数来获取用户想要流式传输的设备。在win32 C++控制台应用程序中,如何使用openCV实现这样的功能?
3个回答

5
如Martin所说,OpenCV不支持此功能,但您可以使用一个小技巧。如果这能满足您的需求,您可以通过连续调用cvCreateCameraCapture()来枚举相机并找出相机数量,直到它返回NULL。
类似下面这样:
CvCapture *cap;
int n = 0;
while(1)
{
   cap = cvCreateCameraCapture(n++);
   if (cap == NULL) break;
   cvReleaseCapture(&cap);
}

cvReleaseCapture(&cap);
return n-1;

现在,您有许多相机设备,因此您可以让用户通过索引从列表框中选择其中一个。

缺点是OpenCV不会提供有关设备名称的任何信息,因此如果您也想实现这一点,您应该查看Microsoft DirectShow或Martin提出的库。


1
在我的电脑上,无论我输入什么索引,它都返回默认摄像头,尽管我只连接了两个。 - xandy

3

1
尝试使用一些操作系统函数来枚举网络摄像头。这可能需要一些工作,但这种方法将确保您每次都能获得列表(不像OpenCV黑客那样,有时由于某些原因无法正常工作)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接