方法一:在.NET Framework4.0框架下 加装大华设想头并采用数据流方式实时读取摄像头数据;
关于摄像头数据读取方式主要有两种;1、采用数据流的方式;2、采用RTSP 流数据拉取; 两种方式各有千秋;主要看应用场景;本文采用了 sdk 中的数据流直接读取的方式;通过测试发现优点就是时效性更高一点。大约快500ms以上;
SDK 的下载请异步到 大华官网
设备网络SDK-浙江大华技术股份有限公司 (dahuatech.com)
关于摄像头的配置工作请自行越多使用说明本文不在阐述;
搭建第一个读数 摄像头数据并将数据转变成 opencv 需要的 mat 格式;
第一步:
新建一个 C# windows 窗体程序 名称定义为DaHuaDemo;
在窗体上放置如下控件 pictureBox 命名为realplay_pictureBox ;用于接收 摄像头流数据实时显示;pictureBox 命名为PBCaptureImage 用来处理识别后或者处理后的图片
放置:textbox 用于输入 摄像头的 IP 以及端口号和 登录用户名和密码;
放置button 用于登录:
代码如下:
private static fDisConnectCallBack m_DisConnectCallBack;
private static fHaveReConnectCallBack m_ReConnectCallBack;
private static fRealDataCallBackEx2 m_RealDataCallBackEx2;
private static fSnapRevCallBack m_SnapRevCallBack;
private IntPtr m_LoginID = IntPtr.Zero;
private NET_DEVICEINFO_Ex m_DeviceInfo;
private IntPtr m_RealPlayID = IntPtr.Zero;
private const int MaxSpeed = 8;
private const int MinSpeed = 1;
private static Mat rbgImg=new Mat();
private static Mat yuvImg;
private void RealPlayAndPTZDemo_Load(object sender, EventArgs e)
{
m_DisConnectCallBack = new fDisConnectCallBack(DisConnectCallBack);
m_ReConnectCallBack = new fHaveReConnectCallBack(ReConnectCallBack);
m_RealDataCallBackEx2 = new fRealDataCallBackEx2(RealDataCallBackEx);
m_SnapRevCallBack = new fSnapRevCallBack(SnapRevCallBack);
yuvImg = new Mat(2880, 2560, MatType.CV_8UC1);
// 这个地方 采用不同的 摄像头传递 图像大小确定
//yuvImg = new Mat(1440, 1280, MatType.CV_8UC1);
try
{
NETClient.Init(m_DisConnectCallBack, IntPtr.Zero, null);
NETClient.SetAutoReconnect(m_ReConnectCallBack, IntPtr.Zero);
NETClient.SetSnapRevCallBack(m_SnapRevCallBack, IntPtr.Zero);
InitOrLogoutUI();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);