使用EmguCV3.0.0调用摄像头并设置帧率

此教程使用emgu3.0.0,其他版本兼容性未知。

  转载请注明出处: http://www.cnblogs.com/zaiyuzhong/p/open-camera-with-emgu3_0_0.html

先说设置帧率,是通过调用Capture实例的SetCaptureProperty方法:

  capture.SetCaptureProperty(CapProp.Fps, 帧率数);

该方法可以设置绝大多数摄像头参数。相应的,可以通过GetCaptureProperty获得这些参数。

该示例只需引用 Emgu.CV.dll 和 Emgu.Util.dll

 1 var capture = new Capture(0); //这里打开第一个, 多个摄像头先获取名字数组, 再根据名字获得对应下标
 2 capture.SetCaptureProperty(CapProp.Fps, 1);
 3 var ts = new ThreadStart(() => 
 4 {
 5     while(!shouldStop)
 6     {
 7         var image = capture.QueryFrame(); // image是Emgu.CV.Mat类型
 8     }
 9 });
10 shouldStop = false;
11 new Thread(ts){ IsBackground = true }.Start();
打开摄像头
 1 public Bitmap ConvertMat2Bitmap(Mat cvImg)
 2 {
 3     Bitmap bmpImg;
 4     if (cvImg.Depth != DepthType.Cv8U)
 5     {
 6         bmpImg = new Bitmap(1, 1, PixelFormat.Format8bppIndexed);
 7         return bmpImg;
 8     }
 9     var pixelFormat = PixelFormat.Format8bppIndexed;
10     if (cvImg.NumberOfChannels == 3)
11         pixelFormat = PixelFormat.Format24bppRgb;
12     else if (cvImg.NumberOfChannels == 4)
13         pixelFormat = PixelFormat.Format32bppArgb;
14     bmpImg = new Bitmap(cvImg.Cols, cvImg.Rows, cvImg.Step, pixelFormat, Marshal.UnsafeAddrOfPinnedArrayElement(cvImg.Data, 0));
15     return bmpImg;
16 }
Mat转Bitmap

最近家里没电脑, 等等我实验一下3.1

最后别忘了释放Capture实例

posted @ 2017-04-01 11:16  在风里  阅读(1649)  评论(0编辑  收藏  举报