当前位置:首页 » 《我的小黑屋》 » 正文

C# 上位机之海康相机开发(SDK)实战教程

20 人参与  2024年12月20日 08:01  分类 : 《我的小黑屋》  评论

点击全文阅读


在很多工业自动化、机器视觉、安防监控等领域,海康威视(Hikvision)提供的相机在图像采集和视频处理方面有着广泛的应用。作为开发者,我们常常需要将这些设备与上位机软件进行集成,实现图像采集、处理和保存等功能。

海康威视提供了完善的开发工具包(SDK),方便我们在C#等语言中进行二次开发,特别是在Windows平台上。本文将介绍如何在C#中使用海康威视的SDK进行相机操作,包括连接相机、获取图像、显示图像等基础功能。


1. 准备工作:安装海康SDK

在开始开发之前,首先需要准备开发环境和安装海康威视的SDK。海康威视的SDK可以在其官网或者通过技术支持获取。

步骤 1:下载海康SDK
登录海康威视官网:海康官网在 "开发者中心" 或 "SDK下载" 页面,下载适合你的开发环境的 SDK 包。

下载完毕后,你将得到一个压缩包,解压后会看到SDK的相关文件夹,包括API文档、示例代码和DLL动态链接库。

步骤 2:添加SDK依赖

在C#项目中,你需要引用海康SDK的DLL文件,通常包括:

HCNetSDK.dllPlayCtrl.dllCommCtrl.dll

将这些DLL文件添加到项目中(将DLL文件复制到项目目录,或者通过项目的 "引用" 添加)。


2. SDK基本概念与使用方法

海康SDK为C#开发提供了接口函数,主要的操作包括:

初始化SDK:初始化SDK资源,通常在开始时需要调用。连接设备:通过设备的IP地址、端口号、用户名和密码连接设备。视频流捕获:从相机获取视频流并显示。图像抓取:定时或按需获取静态图像。断开连接:操作完成后,释放SDK资源。

常见的SDK操作流程如下:

初始化SDK。连接设备。启动视频流。获取视频数据。显示视频或图像。断开连接,释放资源。

3. C#开发海康相机接口的基本步骤

以下是一个简单的示例,展示如何在C#中使用海康威视的SDK进行图像采集和显示。

步骤 1:初始化SDK

在程序启动时,首先需要调用海康SDK的初始化函数。

using System;using System.Runtime.InteropServices;using System.Windows.Forms;namespace HikvisionCamera{    public partial class MainForm : Form    {        // 导入海康SDK的DLL        [DllImport("HCNetSDK.dll")]        private static extern bool NET_DVR_Init();        [DllImport("HCNetSDK.dll")]        private static extern bool NET_DVR_Cleanup();        public MainForm()        {            InitializeComponent();        }        // 初始化SDK        private void InitializeSDK()        {            bool success = NET_DVR_Init();            if (success)            {                MessageBox.Show("SDK初始化成功");            }            else            {                MessageBox.Show("SDK初始化失败");            }        }        // 释放SDK资源        private void CleanupSDK()        {            NET_DVR_Cleanup();        }        private void MainForm_Load(object sender, EventArgs e)        {            InitializeSDK();        }        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)        {            CleanupSDK();        }    }}

代码说明:
使用 NET_DVR_Init 初始化海康SDK。在程序退出时,调用 NET_DVR_Cleanup 清理资源,释放SDK占用的内存和句柄。
步骤 2:连接设备

通过SDK提供的接口连接海康相机,通常需要设备的IP地址、端口号、用户名和密码。

[DllImport("HCNetSDK.dll")]private static extern int NET_DVR_Login_V30(string ip, ushort port, string username, string password, ref NET_DVR_DEVICEINFO_V30 deviceInfo);[DllImport("HCNetSDK.dll")]private static extern bool NET_DVR_Logout_V30(int userID);private int m_lUserID = -1; // 用户IDprivate NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30();private void LoginToDevice(){    string ip = "192.168.1.100";    ushort port = 8000;    string username = "admin";    string password = "12345";    m_lUserID = NET_DVR_Login_V30(ip, port, username, password, ref deviceInfo);    if (m_lUserID < 0)    {        MessageBox.Show("设备连接失败");    }    else    {        MessageBox.Show("设备连接成功");    }}private void LogoutFromDevice(){    if (m_lUserID >= 0)    {        NET_DVR_Logout_V30(m_lUserID);        m_lUserID = -1;    }}

代码说明:
NET_DVR_Login_V30:登录设备,返回用户ID。NET_DVR_Logout_V30:注销设备,释放连接。
步骤 3:获取视频流并显示

获取视频流并通过SDK显示图像,通常会用到 NET_DVR_RealPlay_V30 方法。

[DllImport("HCNetSDK.dll")]private static extern int NET_DVR_RealPlay_V30(int userID, ref NET_DVR_CLIENTINFO clientInfo, IntPtr hWnd, bool block);private void StartVideoStream(){    if (m_lUserID < 0)    {        MessageBox.Show("请先登录设备");        return;    }    NET_DVR_CLIENTINFO clientInfo = new NET_DVR_CLIENTINFO();    clientInfo.lChannel = 1; // 通道号,通常是1    clientInfo.hPlayWnd = videoPanel.Handle; // 显示视频的面板句柄    int realPlayHandle = NET_DVR_RealPlay_V30(m_lUserID, ref clientInfo, IntPtr.Zero, true);    if (realPlayHandle < 0)    {        MessageBox.Show("视频流启动失败");    }    else    {        MessageBox.Show("视频流启动成功");    }}

代码说明:
NET_DVR_RealPlay_V30:开始实时视频流播放。clientInfo 包含通道号和显示视频的窗口句柄。
步骤 4:获取静态图像

除了视频流外,还可以使用 NET_DVR_CaptureJPEGPicture 方法来抓取相机的静态图像。

[DllImport("HCNetSDK.dll")]private static extern bool NET_DVR_CaptureJPEGPicture(int userID, int channel, ref NET_DVR_JPEGPARA jpegPara, string fileName);private void CaptureImage(){    if (m_lUserID < 0)    {        MessageBox.Show("请先登录设备");        return;    }    NET_DVR_JPEGPARA jpegPara = new NET_DVR_JPEGPARA();    jpegPara.wPicSize = 2; // 设置图片质量    jpegPara.wPicQuality = 0; // 设置图片大小    string fileName = @"C:\CapturedImage.jpg";    bool success = NET_DVR_CaptureJPEGPicture(m_lUserID, 1, ref jpegPara, fileName);    if (success)    {        MessageBox.Show("图片抓取成功");    }    else    {        MessageBox.Show("图片抓取失败");    }}

代码说明:
NET_DVR_CaptureJPEGPicture:捕获静态图像并保存为JPEG文件。

4. 常见问题与调试技巧

相机无法连接:确认相机的IP地址、端口、用户名和密码是否正确,且设备是否与PC处于同一网络。视频流显示不正常:确保窗口句柄传递正确,显示面板的尺寸足够容纳视频。API调用返回负值:海康SDK通常返回负值表示失败。调用 NET_DVR_GetLastError 获取详细错误信息。

5. 总结与拓展

本文介绍了如何在C#中使用海康威视的SDK进行相机操作,包括相机连接、视频流显示和图像抓取等基本功能。通过SDK的接口,开发者可以轻松地将海康威视相机集成到自己的应用中,满足不同的需求。

未来你可以进一步拓展功能,例如:

实现多通道视频流显示。图像处理(如人脸识别、物体检测等)。支持录像和回放功能。

海康威视的SDK是一个强大且灵活的工具,结合C#的开发,可以实现各种复杂的图像采集与处理功能,助力开发者构建高效的视觉系统。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/203909.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1