c#-设置捕获设备EmguCV
作者:互联网
我正在使用EmguCV中的Capture类从WebCam拍摄图像.
根据类(http://www.emgu.com/wiki/files/2.0.0.0/html/18b6eba7-f18b-fa87-8bf2-2acff68988cb.htm)的文档,Capture具有3个构造函数.
使用public Capture()可以使用默认相机,并且可以正常工作.
正如我在其中一个示例中看到的那样,
public Capture(string fileName) //takes a video file as the source for the captures.
最后一个构造函数是
public Capture(int camIndex) //which is supposed to "Create a capture using the specific camera"
我尝试使用最后一个构造函数来允许用户选择设备,以防他拥有多个摄像头(例如,笔记本电脑中的集成摄像头或插入了USB cam)
我的问题是我不知道如何获取可用设备的列表.尝试创建索引范围从0到99的捕获,并尝试捕获一个期望发生异常的帧,但捕获100个捕获仅拍摄黑色图像.另外,当我使用默认相机时,我不知道如何获取他的索引.
有什么帮助吗?
编辑:湿婆的答案中的信息,我得到它与此(我发布以供将来参考):
private void onl oad(object sender, RoutedEventArgs e)
{
//Add the image processing to the dispatcher
this.Dispatcher.Hooks.DispatcherInactive += new EventHandler(dispatcherTimer_Tick);
//Get the information about the installed cameras and add the combobox items
DsDevice[] _SystemCamereas = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
Video_Device[] WebCams = new Video_Device[_SystemCamereas.Length];
for (int i = 0; i < _SystemCamereas.Length; i++)
{
WebCams[i] = new Video_Device(i, _SystemCamereas[i].Name, _SystemCamereas[i].ClassID); //fill web cam array
ComboBoxDevices.Items.Add(WebCams[i].ToString());
}
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
if (capture != null)
{
//Capture an image
Image<Bgr, byte> img = capture.QueryFrame();
//Show the image in the window
ImageOriginal.Source = ImageProcessor.ToBitmapSource(img);
}
}
private void ComboBoxDevices_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//If there is already a capture, dispose it
if (capture != null)
{
capture.Dispose();
}
//Get the selected camera
int selectedDevice = ComboBoxDevices.SelectedIndex;
try
{
//Create new capture with the selected camera
capture = new Capture(selectedDevice);
}
catch (Exception excpt)
{
MessageBox.Show(excpt.Message);
}
}
解决方法:
捕获对象可用于使用以下代码将静态文件作为输入提供
Capture grabber = new Emgu.CV.Capture(@".\..\..\file.avi");//can be relative path or absolute path of the video file.
为了找到连接的网络摄像头列表,需要将诸如Direct Show(DirectShow.Net.dll)之类的内容导入到项目中,并使用以下代码检索连接的网络摄像头列表.
DsDevice[] _SystemCamereas = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
Video_Device[] WebCams = new Video_Device[_SystemCamereas.Length];
for (int i = 0; i < _SystemCamereas.Length; i++)
{
WebCams[i] = new Video_Device(i, _SystemCamereas[i].Name, _SystemCamereas[i].ClassID); //fill web cam array
Camera_Selection.Items.Add(WebCams[i].ToString());
}
检查此链接以获取完整代码
http://www.emgu.com/wiki/index.php?title=Camera_Capture
该列表可以填充到组合框中,并且可以选择每个连接的设备来检索来自特定设备的视频输入.
示例可以在这里找到:
http://fewtutorials.bravesites.com/entries/emgu-cv-c/level-2—use-multiple-cameras-in-one-application.
对于您的最后一个问题,默认摄像机的索引始终为0.
因此,要使用默认相机初始化捕获对象,您将必须使用以下代码
Capture grabber = new Emgu.CV.Capture(0);
标签:emgucv,capture,wpf,c 来源: https://codeday.me/bug/20191030/1970386.html