海康威视工业相机SDK二次开发

好气,第一次写文章,结果没不小心保存关掉,什么都没了。
本人是一名在读研究生,被导师分配了做项目中海康工业相机的二次开发。实现的需求是:实现八个相机同时打开视频,并且分相机采图保存到各自的文件夹中。由于网上关于海康SDK的二次开发内容较少,对新手较不友好,自己也磕磕绊绊做了一段时间,现回过头来做个小总结。这里主要写的是如何迈出二次开发的第一步。

一个踩过的小误区

一开始找了一篇 关于海康威视sdk与海康威视web的史上最精细的教程 (一) ,对着一通猛弄了好几天,还纠结为什么工业相机找不到密码。做笔记,要区分网络设备SDK和工业相机SDK---->

设备网络SDK的描述如下:
概述
设备网络SDK是基于设备私有网络通信协议开发的,为嵌入式网络硬盘录像机、NVR、网络摄像机、网络球机、视频服务器、解码器、报警主机、网络存储等产品服务的配套模块,用于远程访问和控制设备软件的二次开发。

工业相机SDK的描述如下:
概述
工业相机SDK是用于控制相机的一个独立组件,支持获取实时图像数据、配置参数、对图像进行后续处理等功能。工业相机SDK兼容GigE Vision协议、USB3 Vision协议、Camera Link协议、CoaXPress协议,目前支持Windows、Linux、Mac以及Android系统,不同的操作系统下需要加载使用配套的SDK版本并参考相应SDK开发指南。SDK对相机的控制上,最基本的功能有参数设置和图像获取两部分。

需要 强调的是,工业相机是没有密码的,除非有IP冲突,否则是随连随用的。

工业相机二次开发的Demo示例

要想使用工业相机的SDK,需要先下载海康的MVS软件– 官方下载地址 ,根据你的操作系统机器选择下载视觉工业相机客户端MVS。二次开发的Demo示例在软件目录下的MVS\Development\Samples中,打开如图:
在这里插入图片描述
根据你开发所用的语言环境不同选择对应的文件夹,这里我用到的是C++语言,开发软件是VS2015,所以选择VC文件夹,里面的demo示例程序如下:
在这里插入图片描述
根据我的需求,我只用到了红框所示的两个程序,但是这里能实现的功能还是很完善的

二次开发用到的一些文件

必须要用到lib文件MvCameraControl.lib,该文件存在MVS目录MVS\Development\Libraries中,根据你的系统位数选择相应的lib文件,连接方法:
选中项目名称右键——属性——连接器——常规——附加库目录——这里是lib文件所在的路径
选中项目名称右键——属性——连接器——输入——附加依赖性——这里是lib文件的名称MvCameraControl.lib。
还需要用到MvCamera.cpp和MvCamera.h,这两个直接导入到工程中,在工程的头文件引用MvCamera.h即可。
此外我还用到了一个MultipleCameraDefine.h头文件,存放的是一些常用的宏定义,根据需求修改即可。

自己做的小demo

本文只是起到引路的作用,所以具体的代码就不放了,下面是自己结合示例Demo做的小界面。
实现了打开8台相机,修改相机参数,存图为bmp格式保存到各自的文件夹,循环采图等。
遇到一个小Bug是如果相机在demo使用过程中拔掉,即使关闭相机再初始化,也会在设置触发模式那里中断程序,这个bug暂时还没解决,欢迎各位大佬来交流意见。
在这里插入图片描述
在这里插入图片描述

由于实验需要使用双目相机同步采集图像,实验室准备的设备是 海康 威视 工业相机 ,对其进行 二次开发 ,其中花了大部分时间查找资料,以及代码进行反复调试,最后到达了想要的效果,并写博客记录一下。 【注意事项】 ------------------------------------ 1. 请到 海康 威视 官网下载最新版本设备网络 SDK :http://www.hikvision.com/Cn/download_more_401.html 2. 请将设备网络 SDK 开发包【库文件】里的HCNet SDK .dll、HCCore.dll、HCNet SDK Com文件夹、PlayCtrl.dll、SuperRender.dll、AudioRender.dll、ssleay32.dll、libeay32.dll、zlib1.dll、hpr.dll等文件均拷贝到bin文件夹下。HCNet SDK Com文件夹(包含里面的功能组件dll库文件)需要和HCNet SDK .dll、HCCore.dll一起加载,放在同一个目录下,且HCNet SDK Com文件夹名不能修改。 3. 如果自行开发 软件 不能正常实现相应功能,而且程序没有指定加载的dll库路径,请在程序运行的情况下尝试删除HCNet SDK .dll。如果可以删除,说明程序可能调用到系统盘Windows->System32目录下的dll文件,建议删除或者更新该目录下的相关dll文件;如果不能删除,dll文件右键选择属性确认 SDK 库版本。 4. 如按上述步骤操作后还是不能实现相应功能,请根据NET_DVR_GetLastError返回的错误号判断原因。 ),从而调用动态库里封装好的方法。因为C/ C++ 的类型与C#的数据类型是不一样的,动态库中的C/ C++ 的数据类型必须转换成C#对应类型;3、需要注意的是,程序编译环境位数于加载的 SDK 动态库位数需要保持一致。1、 海康 提供的设备网络 SDK 是封装的动态链接库(Windows的dll或者Linux的so),各种开发语言对接 SDK ,都是通过加载动态库链接,调用动态库中的接口实现功能模块对接,因此,设备网络 SDK 的对接不区分开发语言,而且对接的流程和对应的接口都是通用的,各种语言调用动态库的方式有所不同。 如果您是想实现 海康 sdk 包的Demo实例中 MFC 的分功能,那么请慢慢看,这篇文章百分之九十九可以帮你实现。 提醒:内容来自网络和自己实际操作,如有问题请联系hww168@yeah.net 首先,我们去下载 海康 威视 提供的 sdk 开发包。 https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10 下载官网我也放在上面了,大家根据自己需要去下载。 这是我下载好的 sdk 开发包 文章目录前言一、前置准备1.官网下载 sdk [https://www.hikvision.com/cn/download_more_570.html](https://www.hikvision.com/cn/download_more_570.html)2.demo拷出备用二、Idea 重新构建demo1.没用的东西,删2.idea 简简单单新建个java项目3.CTRL CV大法4.项目设置5.万事大吉?6.万事大吉! 该Demo在官方原版基础上修改,改用idea进行整理开发,主要介绍预览、回放 海康 威视 MV-CA060-11 GM 工业相机 首次安装与MVS客户端操作 https://blog.csdn.net/u014779536/article/details/106577273/?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%B5%B7%E5%BA%B7mvs%E7%9B%B8%E6%9C%BA%E8%BD%AF%E4%BB%B6%E6%95%99%E7%A8%8B&utm_medium=distrib