我曾经在opencv的v3.4.1中使用此功能将相机名称Map到相机索引,但我将其升级到v4.1.0。但此功能不再起作用。相机索引不再匹配。您知道为什么会出现这种情况以及如何正确Map吗?
我实际上使用的是Emgu 4.1.0和C#。下面我使用DirectShowLib nuget来获取VideoInput设备的列表。在v3中,顺序与opencv相机索引完全匹配。在v4中不是,似乎顺序是错误的。
using DirectShowLib;
private DsDevice[] directShowCameras =
DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
private int getCameraIndexForName(string name)
{
for (int i = 0; i < directShowCameras.Count(); i++)
{
if(directShowCameras[i].Name.ToLower().Contains(name.ToLower()))
{
return i;
}
}
return -1;
}
1条答案
按热度按时间ymdaylpp1#
原来v4.1.0优先考虑MSMF而不是DirectShow。此外,这些框架之间的相机枚举也不同。因此,使用此函数将相机友好名称转换为相机索引。这使用SharpDx.MediaFoundation nuget库在c#中调用MSMF API
只是为了100%使用较新的MSMF,我也会在创建相机对象时指定此后端。
这个后端似乎对摄像头更好用,包括macbook air的内置摄像头。