我尝试使用Emgu CV框架显示来自4个摄像头的视频。只有前2个摄像头正确显示,对于另外2个摄像头,RetrieveBgrFrame(Capture对象)的方法总是返回null。
我尝试在USB集线器中交换摄像头的插入顺序,始终只有DirectShow获取的列表中的前两个摄像头正在工作)。为了确保所有相机正常工作,我使用了其他商业程序进行检查,所有相机都正常工作。
有没有人体验过这个?你知道原因是什么吗?
非常感谢任何帮助或指向帮助的人。
请帮忙!
谢谢,
TC
======== code ==========
// ---------------创建相机对象---------------------------
DsDevice[] _SystemCamereas = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice); ///// after this statement, _SystemCamereas contains 4 entries
//Capture capture;
Capture capture;
capture = new Capture(2); ///// if I use '0' or '1', i.e. the ids of the first 2 cameras, picture box displayed correctly
capture.ImageGrabbed += ProcessFrame;
_captureImageBoxDict.Add(capture, imageBox1);
imageBox1.SizeMode = PictureBoxSizeMode.StretchImage;
// ---------- Grab后处理帧的回调方法
private void ProcessFrame(object sender, EventArgs arg)
{
Capture capture = (Capture)sender;
Image<Bgr, Byte> frame = capture.RetrieveBgrFrame(); // for camera id = 0 or 1, frame is not null and everythins goes smoothly, for id = 2 or 3, frame is null!!!!
if (frame == null)
{
return;
}
// ......
}
==========其他系统信息====================
Microsoft Visual Studio Community 2013
Emgu CV版本:2.4.10.1939(通过Visual Studio NuGet Manager获取)
.NET Framework 4.5
操作系统:Windows 7专业版
处理器:Intel Core i7 CPU Q 720 @ 1.60GHz
已安装的内存(RAM):16.0 GB