尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

海康威视相机C#二次开发指图像采集

海康威视相机C#二次开发指图像采集 文章目录创建并打开相机图像采集停止采集和关闭相机海康威视相机C#二次开发环境配置本节的目的是实现海康威视GigE相机的图像采集功能示例如下布局很简单左侧四个按钮右侧是个Image。创建并打开相机海康威视的C#套件提供两种创建相机实例的方案分别是基于设备信息和基于IP。由于前面我们已经实现了设备枚举故而通过前面枚举到的设备信息来创建。创建完成后对于GigE相机和USB相机需要额外进行些许配置。在创建、配置完成之后即可开启设备代码如下IDevicedevice;privatevoidbtnOpenCam_Click(objectsender,RoutedEventArgse){vardevInfocbList.SelectedItemasIDeviceInfo;IDevicedeviceDeviceFactory.CreateDevice(devInfo);if(deviceisIGigEDevice){IGigEDevicegigEDevicedeviceasIGigEDevice;intpacketSize;gigEDevice.GetOptimalPacketSize(outpacketSize);gigEDevice.Parameters.SetIntValue(GevSCPSPacketSize,packetSize);}elseif(deviceisIUSBDevice){IUSBDeviceusbDevicedeviceasIUSBDevice;usbDevice.SetSyncTimeOut(1000);}intretdevice.Open();if(ret!MvError.MV_OK)MessageBox.Show(相机打开失败);}【DeviceFactory.CreateDevice】即为设备创建函数输入参数是设备信息另一种基于IP的函数是【DeviceFactory.CreateDeviceByIp】输入参数是设备IP和本机IP。GigE相机需要通过配置网口相机的最佳包大小USB相机则需要设置USB同步读写超时时间。【Open】是设备的内置方法用于开启相机。代码中【device】被设为类成员因为后续关闭相机、采集图像时同样需要用到这个对象。图像采集海康威视SDK提供了回调函数可以在获取图像的那一刻触发示例如下privatevoidbtnStartCam_Click(objectsender,RoutedEventArgse){device.StreamGrabber.SetImageNodeNum(5);// 缓存节点数device.StreamGrabber.FrameGrabedEventStreamGrabber_FrameGrabedEvent;varretdevice.StreamGrabber.StartGrabbing();if(ret!MvError.MV_OK)MessageBox.Show(图像采集失败);}privatevoidStreamGrabber_FrameGrabedEvent(object?sender,FrameGrabbedEventArgse){varimg(IImage)e.FrameOut.Image.Clone();try{intw(int)img.Width;inth(int)img.Height;byte[]rawDatae.FrameOut.Image.PixelData;varLrawData.Length;Dispatcher.BeginInvoke((){var_writeableBitmapnewWriteableBitmap(w,h,96,96,PixelFormats.Gray8,null);imShow.Source_writeableBitmap;_writeableBitmap.WritePixels(newInt32Rect(0,0,w,h),rawData,w,0);});}catch{}finally{if(e.FrameOutisIDisposabledisposable)disposable.Dispose();}}【FrameGrabedEvent】即获取图像的触发事件在绑定回调函数后即可采用【StartGrabbing】开启图像采集。在回调函数中参数【e】包含了我们需要的数据FrameOut其中的Image就是图像数据。在海康威视新版SDK中为Image提供了像素数据PixelData有了这个就不用像之前那样跑指针了。停止采集和关闭相机停止采集和关闭相机的触发函数如下在停止采集的过程中一方面需要调用【StopGrabbing】另一方面需要注销回调函数以防下次打开的时候回调函数混乱。privatevoidbtnStopCam_Click(objectsender,RoutedEventArgse){device.StreamGrabber.StopGrabbing();device.StreamGrabber.FrameGrabedEvent-StreamGrabber_FrameGrabedEvent;}privatevoidbtnCloseCam_Click(objectsender,RoutedEventArgse){intretdevice.Close();if(ret!MvError.MV_OK)MessageBox.Show(设备关闭失败);device.Dispose();devicenull;}【Close】用于关闭设备【Dispose】用于释放上位机的资源。
返回列表