海康威视监控相机的SDK与opencv调用(非工业相机)

1.研究内容

本篇主要对海康威视的监控相机的SDK回调进行研究,并于opencv结合,保存图像,以供后续其他处理,开发语言为C++

2.步骤及方法

2.1 海康SDK介绍

海康SDK下载地址
根据自身编译环境,下载对应的SDK,需要注意的是,不要和工业相机SDK相混淆,工业相机好像是MVS是什么玩意儿,现在暂时没研究
在这里插入图片描述
SDK包的结构如下,包括需要的头文件和库目录,其中windows下还提供了Demo示例,开发文档是我们时常需要用到的,结构如下:
在这里插入图片描述
其中SDK编程指南是需要注意的一个地方,通常需要根据自己的相机型号选择对应的文件,有些相机型号可能不支持,比如我使用的DS-2CD7********,这款相机,就只支持IPC的,查看文档是否支持相机,可以打开文档,在SDK简介中查看:
在这里插入图片描述
SDK文件确定后可以开始后续的开发了

2.2 环境搭建

打开visual studio 2022,配置sdk环境,包括前面提到的库文件和头文件,其中用到了opencv,配置opencv的相关头文件和库文件:
在这里插入图片描述
在这里插入图片描述
配置方式不多说,也可以在VC++目录中添加
添加完成后,编写头文件,蒋需用到的库包含进来,包括opencv的和海康sdk的:
在这里插入图片描述
其中有一个PlayM4.h头文件,sdk里面是没有的,需要在示例文件中拷贝过来,opencv如果是编译成一个opencv_world的,直接配置上去就行了

2.3 相机配置

海康相机配置比较容易,初始的IP地址是192.168.1.64,可以根据实际使用情况,修改相机的IP,登录的用户名和密码,sdk调用的时候需要用到这3个信息。

2.4 SDK调用

SDK取流在文档的第4章《函数调用示例》中,直接复制,粘贴,修改好自己相机的IP,用户名和密码就可以正常调用起来了,主要分为以下几个部分:
(1)初始化
初始化,包括设备注册,设置连接时间和重连时间,设置异常回调函数等,其中最重要的是设置登录相机设备的IP地址,用户名和密码。
(2)调用相机
调用相机有多种方式,可以直接使用rtsp取流,也可以直接使用海康sdk提供的回调取流函数,这一部分需要参考sdk开发文档,不只是代码示例,还有sdk提供的其他函数,可参考5《函数说明》,例如,我需要拿到图像后和opencv结合,那么需要拿到图像的数据,就需要用到以下接口了:
在这里插入图片描述

3 图像保存

本篇主要解决的问题是,sdk拿到的图像通过opencv保存下来并且可以做其他操作,sdk中提供的参考示例用了一个Sleep函数,不是和符合我的要求,所以做了一些修改后面会提供整个代码工程,主要的改动如下:
参考的sdk:
在这里插入图片描述
修改的部分

//使用海康的SDK抓取图像HKSDK_LIB_API int __stdcall  playCapture(void* user,int count, Mat &save_image_l,Mat &save_image_r)
{//外部多线程使用LPMyStruct stru = (LPMyStruct)user;//启动预览并设置回调数据流NET_DVR_PREVIEWINFO struPlayInfo = { 0 };struPlayInfo.hPlayWnd = NULL;         //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空struPlayInfo.lChannel = stru->channel;       //预览通道号struPlayInfo.dwStreamType = 0;       //0-主码流,1-子码流,2-码流3,3-码流4,以此类推struPlayInfo.dwLinkMode = 0;       //0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTPstruPlayInfo.bBlocked = 1;       //0- 非阻塞取流,1- 阻塞取流LPNET_DVR_JPEGPARA JpegPara = new NET_DVR_JPEGPARA;JpegPara->wPicQuality = 0;JpegPara->wPicSize = 70;int w = 2560;int h = 1440;char* Jpeg = new char[w * h];DWORD len = w * h;LPDWORD Ret = 0;if (!NET_DVR_SetCapturePictureMode(BMP_MODE)){cout << "Set Capture Picture Mode error!" << endl;cout << "The error code is " << NET_DVR_GetLastError() << endl;}vector<char>data(w * h);bool capture = NET_DVR_CaptureJPEGPicture_NEW(stru->lUserId, struPlayInfo.lChannel, JpegPara, Jpeg, len, Ret);if (!capture){printf("Error: NET_DVR_CaptureJPEGPicture_NEW = %d", NET_DVR_GetLastError());return -1;}for (int i = 0; i < w * h; i++)data[i] = Jpeg[i];if(stru->channel==1){save_image_l = imdecode(Mat(data), 1);}if (stru->channel == 2) {save_image_r = imdecode(Mat(data), 1);}return 0;
}

此时save_image_r 表示的就是一个Mat了,主要修改包括:
(1)LPNET_DVR_JPEGPARA
从这一部分开始,和sdk提供的有所区别,主要用NET_DVR_CaptureJPEGPicture_NEW替换了NET_DVR_RealPlay_V40函数
其中LPNET_DVR_JPEGPARA类提供了一些配置,包括图像大小,图像质量等。

4 完整C++代码工程

完整的代码工程点击头像获取资源,可以直接部署使用,我这里相机有两个通道图,所以拿到了两个图。

5 参考

[1] 海康威视SDK文档 https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10
[2]https://blog.csdn.net/u013832707/article/details/103405278
[3]https://blog.csdn.net/xiaojunjun200211/article/details/122237091

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/158966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

身份证号码校验

根据《新版外国人永久居留身份证适配性改造要点》&#xff0c;公司需要把代码中对身份证的校验进行优化 就文档内容可以看到需要优化的要点是&#xff1a; 新版永居证号码以 9 开头 受理地区代码出生日期顺序码校验码&#xff1b;&#xff08;共18位&#xff09; eg&#xff…

渗透工具---BurpSuite 插件开发之HelloWorld

本文主要记录如何利用burp官方的新版API即MontoyaApi 写helloworld&#xff08;上一篇的demo使用旧版api写的&#xff0c;这篇及后续开发将采用新版api&#xff09; 先看效果图 更多详细内容见下方 这里有更详细更全面的代码内容 以及配置相关的内容 https://mp.weixin.qq.co…

HarmonyOS ArkTS 基础组件的使用(四)

1 组件介绍 组件&#xff08;Component&#xff09;是界面搭建与显示的最小单位&#xff0c;HarmonyOS ArkUI声明式开发范式为开发者提供了丰富多样的UI组件&#xff0c;我们可以使用这些组件轻松的编写出更加丰富、漂亮的界面。 组件根据功能可以分为以下五大类&#xff1a;…

为什么要学习 Linux?

为什么要学习 Linux&#xff1f; 用 Linus 本人的话来说&#xff0c;用户不需要接触到操作系统。操作系统的功能是给应用程序提供API&#xff0c;因而&#xff0c;只有开发人员才需要学习操作系统。 最近很多小伙伴找我&#xff0c;说想要一些Linux的资料&#xff0c;然后我根…

【Unity细节】如何调节标签图标的大小(select icon)—标签图标太大遮住了物体

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…

C/C++结构体给函数传参

C语言中结构体给函数传参有两种方法&#xff1a; 1.值传递&#xff08;修改形参不改变原值&#xff09; void fun(STUDENT student){……} int main(){fun(student); }2.引用传递&#xff08;传的是地址&#xff0c;修改形参会改变原值&#xff09; void fun(STUDENT * stud…

FPGA语法相关知识合集

一.相关概念 1.四种结构说明语句 2.initial 与 always 的异同点 3.task 与 function 的3个不同点 4.task的语法结构(定义及调用) 5.function的语法结构(定义及调用) 6.function 的一个必须有和一个必须没有&#xff0c;使用规则 7.自动&#xff08;递归&#xff09;函数…

听说90%的人都没搞定手撕协程池这道面试题!

特别的缘分 听说90%的人都没搞定手撕协程池这道面试题&#xff01; 能看到这篇文章一定是特殊的缘分&#xff0c;请务必珍惜&#xff0c;请详细看看吧&#xff0c;哈哈。 不止上图&#xff0c;最近 Go就业训练营 中不少小伙伴说&#xff0c;面试中碰到了好几次手撕协程池的问题…

linux(nginx安装配置,tomcat服务命令操作)

首先进系统文件夹 /usr/lib/systemd/systemLs | grep mysql 查看带有命名有MySQL的文件夹修改tomcat.service文件复制jdk目录替换成我们的路径替换成我们的路径进入这个目录&#xff0c;把修改好的文件拖到我们的工具里面重新刷新系统 systemctl daemon-reload查看tomcat状态…

C语言获取win11新版终端WindowsTerminal窗口句柄

随着Win11的普及&#xff0c;越来越多的人都能发现获取控制台窗口不能再使用以下两种传统方法了&#xff1a; HWND hwnd GetConsoleWindow();HWND hwnd FindWindowA("ConsoleWindowClass",NULL);那是因为win11换了新的终端窗口&#xff0c;叫做WindowsTerminal&am…

web自动化测试十大问题+解决方法汇总,一篇概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、启动浏览器报错…

合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)

基于ARM语音识别的智能家居系统 我们上一篇&#xff0c;我们实现在Linux系统下编译程序&#xff0c;我们首先通过两个小练习来熟悉一下如何去编译。今天&#xff0c;我们来介绍一下LCD屏幕基本使用。 一、LCD屏幕基本使用 如何使用LCD屏幕&#xff1f; 1、打开开发板LCD设…

NLP学习

参考&#xff1a;NLP发展之路I - 从词袋模型到Transformer - 知乎 (zhihu.com) NLP大致的发展历史。从最开始的词袋模型&#xff0c;到RNN&#xff0c;到Transformers和BERT&#xff0c;再到ChatGPT&#xff0c;NLP经历了一段不断精进的发展道路。数据驱动和不断完善的端到端的…

uniapp 打包后各静态资源加载失败的问题(背景图,字体等)

原因: 1.部署地址不在域名根目录下 解决办法(推荐办法2): 办法1.如果部署在域名的文件夹下(例如h5), 则运行的基础路径修改为/h5/ 且注意路由模式 办法2.不修改运行的基础路径(还是./), 将代码中涉及背景图(background-image)和字体资源的路径前统一加,如图:

【giszz笔记】产品设计标准流程【合集】【1.79 万字】

Tips&#xff1a;原笔记共8篇&#xff0c;本文是合集&#xff0c;字数较多&#xff0c;可收藏或关注。 目录 一、普通产品打造的流程 二、更标准一点的产品打造过程&#xff08;十一步&#xff09; &#xff08;一&#xff09;制定工作计划 &#xff08;二&#xff09;用户…

向上转型 向下转型 重写 多态 ---java

目录 一. 向上转型 1.1 概念 1.2 语法格式 1.3 动态绑定引入 1.4 重写的引入 1.5向上转型的使用方式 方式一: 直接赋值 方式二: 通过传参,进行向上转型(多态引入) 方法三:通过返回值, 进行向上转型 二. 重写 2.1 概念 2.2 重写的格式 2.3 重写的规则 【重写和重…

如何最大化客户生命周期价值?APMDR 模型在袋鼠云的落地实践

相信大家都认可一个观点&#xff1a;不论是 To B 还是 To C&#xff0c;用户是企业的核心资源&#xff0c;是互联网产品中最重要的价值之一。因此&#xff0c;深入挖掘用户价值成为现在大部分企业运营的关键。 之前我们为大家介绍过如何利用 RFM 模型让企业聚焦于更有价值的用…

数据分层:打造数据资产管家

一、引言 随着企业数据规模的增长&#xff0c;数据的价值变得越来越重要。然而&#xff0c;传统的数据库在承载大量数据时面临挑战&#xff0c;需要高效有序的维护。因此&#xff0c;建立高效的数据仓库成为了企业决策和管理的基石&#xff0c;但现代技术的背景下&#xff0c;…

动能方案 | 15693协议的读卡器应用 DP1363F 替代RC663

15693协议是一种高频&#xff08;13.56 MHz&#xff09;射频识别&#xff08;RFID&#xff09;协议&#xff0c;广泛满足无线识别和数据传输领域。其特点包括较远的读取范围、支持快速数据传输、与多个标签的兼容等&#xff0c;产生于不同行业有着广泛的应用&#xff0c;包括但…

【广州华锐互动】昆虫3D虚拟动态展示:探索神奇的微观世界

在这个充满科技魅力的时代&#xff0c;我们可以通过各种方式去了解和探索自然界的奥秘。而昆虫作为地球上最为丰富多样的生物群体之一&#xff0c;其独特的生活习性和形态特征一直吸引着人们的目光。 由广州华锐互动开发的昆虫3D虚拟动态展示系统&#xff0c;成为了一种全新的科…