使用海康威视SDK(MVS)读取GigE相机到opencvsharp的Mat类型,WPF快速显示

最近想做一个基于opencvsharp的视觉软件,当然第一步是从相机采图开始了,先测试了海康的sdk,
他们家有一个虚拟相机,没有相机也可以测试,挺方便的。

这个项目我会开源在我的码云上,有兴趣的同学可以去看看,链接见文末,
主要用到了Prism MVVM框架,当然还有opencvsharp,
先贴一些核心代码,相机图片转Mat:

var h = MyModel.MyCameras.FrameInfos[0].stFrameInfo.nHeight;
var w = MyModel.MyCameras.FrameInfos[0].stFrameInfo.nWidth;
Mat image = new Mat(h, w, MatType.CV_8U, MyModel.MyCameras.FrameInfos[0].pBufAddr);

WPF快速显示图片祼数据:转自https://www.cnblogs.com/haodafeng/p/10431387.html

if (_wbBitmap == null)
  _wbBitmap = new WriteableBitmap(w, h, 96, 96, PixelFormats.Gray8, null);

ImgSource = _wbBitmap;
var b = new byte[h * w];
image.GetArray(out b);
ShowImage(b, h, w);

public void ShowImage(byte[] rawData, ushort h, ushort w)// rawData是存储图像裸数据的buffer
{
	unsafe
	{
               
		_wbBitmap.Lock();
        Marshal.Copy(rawData, 0, _wbBitmap.BackBuffer, h * w); //请注意_wbBitmap的数据格式以及buffer大小,以免溢出和显示异常
        _wbBitmap.AddDirtyRect(new System.Windows.Int32Rect(0, 0, w, h)); 
        _wbBitmap.Unlock();
     }
}

相机采集:

  // ch:获取一帧图像 | en:Get one image
        public async Task GetOneImage(int index)
        {
            await Task.Run(() =>
            {
                MyCamera.MV_FRAME_OUT FrameInfo = FrameInfos[index];
                var h = 0;
                var w = 0;
                do
                {
                    var nRet = CameraList[index].MV_CC_SetCommandValue_NET("TriggerSoftware");
                    if (nRet != MyCamera.MV_OK) ShowErrorMsg("TriggerSoftware", nRet);
                    Thread.Sleep(5);//这里不延时有时会采集半张图不知道是不是虚拟相机的原因
                    _ = CameraList[index].MV_CC_GetImageBuffer_NET(ref FrameInfo, 0);

                    h = FrameInfo.stFrameInfo.nHeight;
                    w = FrameInfo.stFrameInfo.nWidth;
                } while (h == 0 | w == 0);
                if (FrameInfo.pBufAddr != IntPtr.Zero)
                {
                    _ = CameraList[index].MV_CC_FreeImageBuffer_NET(ref FrameInfo);

                }
                FrameInfos[index] = FrameInfo;
            });
        }

完整代码在这里,https://gitee.com/tfarcraw/YIJIOpenCVSharp.git
后面有时间会不断完善。

你可能感兴趣的:(Csharp)