海康球机3D定位功能编码实现VC(对前一篇补充改进)
这是对前一篇《海康球机控制函数VC (PTZ控制+对准具体坐标点)》的补充。
在前一篇文章中介绍的设置PTZ参数法,总是基于最初设定的基准坐标而言的,而不是基于每个当前帧而言的。(可参见前一篇文章https://blog.csdn.net/leexin95/article/details/81131902)
所以,本文是设置PTZ参数法的改进--基于动态相对量的设置PTZ参数法,用于连续多次地持续的将球机光轴对准目标。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【算法思想】
设定参数值 = 当前状态 + 坐标相对量;
获取当前状态下的PTZ参数作为基准,利用当前帧中的坐标位置求取相对PT参数,二者之和即为设置参数值。
【代码实现】
///NET_DVR_PTZPOS m_ptzPosCurrent;DWORD dwtmp = 0;DWORD tmp_zd, tmp_yd;//获取当前PTZ状态if (!NET_DVR_GetDVRConfig(0, NET_DVR_GET_PTZPOS, 0, &m_ptzPosCurrent, sizeof(NET_DVR_PTZPOS), &dwtmp)){auto a = NET_DVR_GetLastError();CString s;s.Format("GET:%d", a);AfxMessageBox(s);}//转换为十进制用于运算tmp_zd = (m_ptzPosCurrent.wPanPos / 4096) * 1000 + ((m_ptzPosCurrent.wPanPos % 4096) / 256) * 100 + ((m_ptzPosCurrent.wPanPos % 256) / 16) * 10 + (m_ptzPosCurrent.wPanPos % 16);tmp_yd = (m_ptzPosCurrent.wTiltPos / 4096) * 1000 + ((m_ptzPosCurrent.wTiltPos % 4096) / 256) * 100 + ((m_ptzPosCurrent.wTiltPos % 256) / 16) * 10 + (m_ptzPosCurrent.wTiltPos % 16);tmp_zd = tmp_zd / 10;tmp_yd = tmp_yd / 10;tmp_zd %= 360;tmp_yd %= 360;
/
//计算坐标的相对量
y_degree = (point.y - rt.Height() / 2.0) > 0 ? -atan(-(rt.Height() / 2.0 - point.y) / (rt.Height() / 2) * tan(21.8 / 180 * PI)) * 180 / PI : atan(-(point.y - rt.Height() / 2.0) / (rt.Height() / 2) * tan(21.8 / 180 * PI)) * 180 / PI;
z_degree = ((point.x - rt.Width() / 2.0) > 0) ? atan((point.x - rt.Width() / 2.0) / (rt.Width() / 2) * tan(29.15 / 180 * PI)) * 180 / PI : (360 - atan((rt.Width() / 2.0 - point.x) / (rt.Width() / 2) * tan(29.15 / 180 * PI)) * 180 / PI);
z_degree = ((z_degree < 100) ? -z_degree : 360 - z_degree);
////相对量与当前基准叠加z_degree += tmp_zd;y_degree += tmp_yd;//转换为十六进制用于控制球机NET_DVR_PTZPOS m_ptzPos;m_ptzPos.wAction = 1;DWORD z_idegree = z_degree * 10;DWORD y_idegree = y_degree * 10;m_ptzPos.wPanPos = (z_idegree / 1000) * 4096 + ((z_idegree % 1000) / 100) * 256 + ((z_idegree % 100) / 10) * 16 + z_idegree % 10;m_ptzPos.wTiltPos = (y_idegree / 1000) * 4096 + ((y_idegree % 1000) / 100) * 256 + ((y_idegree % 100) / 10) * 16 + y_idegree % 10;m_ptzPos.wZoomPos =(10/ 1000) * 4096 + ((10 % 1000) / 100) * 256 + ((10 % 100) / 10) * 16 + 10 % 10;//设置PTZ参数if (!NET_DVR_SetDVRConfig(0, NET_DVR_SET_PTZPOS, 0, &m_ptzPos, sizeof(NET_DVR_PTZPOS))){auto a = NET_DVR_GetLastError();CString s;s.Format("SET:%d", a);AfxMessageBox(s);}
海康球机demo中自带的3D定位功能是相对量的,改进后的算法与其功能几乎一致,其中调焦策略可以通过
m_ptzPos.wZoomPos =(10/ 1000) * 4096 + ((10 % 1000) / 100) * 256 + ((10 % 100) / 10) * 16 + 10 % 10;
来设定,加入判断即可,可自行发挥。
【总结】
改进后的方法--“基于动态相对量的设置PTZ参数法”,功能与3D定位功能一致,但存在较小的误差(几个像素),其原因可能有以下几个:
1.存在畸变;
2.坐标转换为角度的算法存在一定的误差;
3.球机机械原因,球机PT角度精确到1度,在1度的区间内小幅度的移动是共用一个相同的PT参数。
海康球机3D定位功能编码实现VC(对前一篇补充改进)相关推荐
- 海康球机控制函数VC (PTZ控制+对准具体坐标点)
控制球机光轴运动到具体坐标的两种方式:设置PTZ参数方法.调用球机3D定位功能. ----------------------------------------------------------- ...
- 海康球机DS-2DF7320拆机过程分享
[拆机原因] 为什么要拆机呢?先说一下我遇到的问题. 球机开机自检时,水平自检故障,其余自检部分均正常(包括俯仰自检正常).自检完成后调好IP接口,调用demo控制球机,发现当给定水平移动指令时,电机 ...
- 海康机器人工业相机常用参数功能设置与获取(持续更新全-C语言)
海康机器人工业相机常用参数功能设置与获取(C语言) 前言 相机属性树 1.设备控制/DeviceControl 1.1相机序列号获取/DeviceSerialNumber 1.2相机自定义命名设置与获 ...
- 海康车牌机控制道闸,并且设置车辆黑白名单。
车牌机控制道闸,并且设置车辆黑白名单.. 基本原理,是HK车牌机识别到车辆后,控制IO控制器,吸合对应的继电器,继电器联通栏杆机的控制引脚, 栏杆机抬起道闸.车辆通过后,栏杆机受到雷达的控制,自动落杆 ...
- 海康摄像头实现点位缩放功能(切换焦距)
//控制缩放,再次点击恢复焦距 isptz = !isptz; //获取摄像头的ptz ptzInfo = yuvRender.GetPostion(); //把屏幕坐标转换成ptz(我是以1920* ...
- 《球机隐私遮蔽定位解析及ONVIF实现》
隐私遮蔽 高速球摄像机实现隐私区域遮蔽 隐私区域自由选取 无论相机处于什么状态,遮蔽块能随着球机移动而移动 球机在不同位姿下的图像点坐标的实时匹配 原理推导 目前两种思路:一种是按照3D定位原理匹配: ...
- 海康SDK 通过java接口设置和获取摄像机参数
以下功能实现需要完成设备初始化,注册,监听和布防的操作,详见CSDNhttps://mp.csdn.net/mp_blog/creation/editor/121543529 海康设备登录 //设备登 ...
- C#海康摄像机SDK二次开发
海康球机设备网络SDK开发实践记录 获取PTZ参数 开发手册相关内容截图 C# 代码实现 //获取球机位置信息结构体大小 Int32 size = Marshal.SizeOf(typeof(CHCN ...
- 《球机的PTZ和视场角与ONVIF的PTZ对应关系》
文章目录 简述 PTZ_ONVIF & PTZ_SDK 球机视场角与ONVIF对应关系 简述 不同品牌对应关系不一致,同一品牌,根据摄像头产品参数也会不一致 球机的PTZ和ONVIF的PTZ是 ...
- vue集成海康h5player实现播放
文章目录 前言 准备工作 视频demo 官方文档 官方工具 开源工具 开始开发 效果 问题点 前言 本篇章只针对官方提供个h5player工具,做播放和分屏demo. 当然本篇章也是针对已经接触了海康 ...
最新文章
- 国外程序员收集整理的PHP资源大全
- 解析时代需要什么样的根目录,中国科技需要什么样的根技术
- mysql audit log.so_Percona Audit Log Plugin(mysql 审计)
- oracle em命令行配置及界面按钮乱码问题解决方法
- Oracle 11g 通过创建物化视图实现不同数据库间的表数据同步
- CodeForces - 622C Not Equal on a Segment(思维+水题)
- c语言函数调用二次方程求根,[编程入门]自定义函数求一元二次方程 (C语言代码)...
- priority_queue实现大顶堆和小顶堆
- ue4光追降噪_【魔改UE4】后记_焦散效果总结
- 图片配置文件设置 索尼a7s2_倒计时开课两天~索尼微单相机专题课程
- OSError: [Errno 22] Invalid argument: ‘\u202aC:\\Windows\\Fonts\\方正粗黑宋简体.ttf‘解决方案
- 拓端tecdat|在R语言中使用概率分布:dnorm,pnorm,qnorm和rnorm
- Atitit nlp用到的技术与功能自然语言处理 v3 t99.docx Atitit nlp用到的技术与常见类库 目录 1. 常用的技术	1 1.1. 语言处理基础技术 分词 相似度等	1 1.2
- 【Python】一键爬取金庸连载版/三联版/世纪新修版小说
- 【报告分享】抖店百宝书-抖音电商(附下载)
- 时序动作检测《BMN: Boundary-Matching Network for Temporal Action Proposal Generation》
- 关于移动H3_2s光猫获得超级密码的步骤以及上传本地配置文件覆盖光猫的配置文件的方法
- 通俗理解LDA主题模型(转)
- 力扣(718.1143)补9.12
- CentOS7本地源yum配置
热门文章
- 查询优化器内核剖析第八篇:执行引擎之数据访问操作---Seek与Lookup
- 【Office 365 2108更新】
- vue项目中使用百度离线地图(最新全面爬坑版)
- dnf维护怎么偷跑进服务器,DNF:回归玩家必看,这四点忠告要牢记,一不小心就被劝退...
- java2.0qq同步_QQ同步助手Java版发布
- 计算机网络管理师2级,计算机网络管理员(二级)操作技能考核试卷
- D-link 带USB口无线路由器 配置网络共享打印机
- linux金山打字通游戏版,金山打字游戏2010电脑版-金山打字游戏(最全大集合安装)下载V8.1.0.1官方版-西西软件下载...
- 紫光输入法linux,紫光拼音输入法
- JavaScript通过百度OCR实现图像文字识别及常见错误解释