控制球机光轴运动到具体坐标的两种方式:设置PTZ参数方法、调用球机3D定位功能。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

【设置PTZ参数方法】

主要利用两个函数:设置参数NET_DVR_SetDVRConfig函数与读取参数NET_DVR_GetDVRConfig函数。

NET_DVR_SetDVRConfig(LONG lUserID, DWORD dwCommand,LONG lChannel, LPVOID lpInBuffer, DWORD dwInBufferSize);NET_DVR_GetDVRConfig(LONG lUserID, DWORD dwCommand,LONG lChannel, LPVOID lpOutBuffer, DWORD dwOutBufferSize, LPDWORD lpBytesReturned);

函数示例:

1.位置坐标转换为角度+进制转换+设置参数

//PTZ参数求取
focus_adjust = 10;//焦距y_degree = (target_y - std_rows / 2.0) > 0 ? -atan(-(std_rows / 2.0 - target_y) / (std_rows / 2) * tan(21.8 / 180 * PI)) * 180 / PI : atan(-(target_y - std_rows / 2.0) / (std_rows / 2) * tan(21.8 / 180 * PI)) * 180 / PI;z_degree = ((target_x - std_cols / 2.0) > 0) ? atan((target_x - std_cols / 2.0) / (std_cols / 2) * tan(29.15 / 180 * PI)) * 180 / PI : (360 - atan((std_cols / 2.0 - target_x) / (std_cols / 2) * tan(29.15 / 180 * PI)) * 180 / PI);z_degree = ((z_degree < 100) ? -z_degree : 360 - z_degree);z_degree += 279;//补上球机初始角度
y_degree += 10;//补上球机初始角度NET_DVR_PTZPOS m_ptzPos;m_ptzPos.wAction = 1;
int z_idegree = z_degree * 10;
int y_idegree = y_degree * 10;
//进制转换
m_ptzPos.wPanPos = DEC2HEX_doc(z_idegree);
m_ptzPos.wTiltPos = DEC2HEX_doc(y_idegree);
m_ptzPos.wZoomPos = DEC2HEX_doc(focus_adjust);
//设置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("%d", a);AfxMessageBox(s);}

2.实时读取球机PTZ参数+判断是否完成设置

//判断是否完成移动NET_DVR_PTZPOS Pos_judge;Pos_judge.wAction = 1;DWORD tmp = 0;int flags_tmp=1;while (flags_tmp){if (!NET_DVR_GetDVRConfig(0, NET_DVR_GET_PTZPOS, 0, &Pos_judge, sizeof(NET_DVR_PTZPOS), &tmp)){auto a = NET_DVR_GetLastError();CString s;s.Format("%d", a);AfxMessageBox(s);}else if(Pos_judge.wPanPos == m_ptzPos.wPanPos && Pos_judge.wTiltPos == m_ptzPos.wTiltPos && Pos_judge.wZoomPos == m_ptzPos.wZoomPos){flags_tmp = 0;}}

备注:设置PTZ参数是一个并行过程,如果不加入结束判断,读取球机画面时将不是所设定参数状态下的图片,而是PTZ调整过程中的某一张图片。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

【调用球机3D定位功能】

主要包括两个函数:NET_DVR_PTZSelZoomIn与NET_DVR_PTZSelZoomIn_EX,两个参数不同但功能一样。

NET_DVR_PTZSelZoomIn(LONG lRealHandle, LPNET_DVR_POINT_FRAME pStruPointFrame);
NET_DVR_PTZSelZoomIn_EX(LONG lUserID, LONG lChannel, LPNET_DVR_POINT_FRAME pStruPointFrame);

参数介绍:

[in]lRealHandle                         NET_DVR_RealPlay或者NET_DVR_RealPlay_V30的返回值
[in]pStruPointFrame                 云台图像区域位置信息

[in]lUserID                                NET_DVR_Login_V40 的返回值
[in]lChannel                              通道号
[in]pStruPointFrame                 云台图像区域位置信息

//NET_DVR_POINT_FRAME
//云台图像区域位置信息。struct{int    xTop;int    yTop;int    xBottom;int    yBottom;int    bCounter;
}NET_DVR_POINT_FRAME, *LPNET_DVR_POINT_FRAME;
Members
//xTop 方框起始点的x坐标
//yTop 方框起始点的y坐标
//xBottom 方框结束点的x坐标
//yBottom 方框结束点的y坐标
//bCounter 保留 

返回值: TRUE 表示成功,FALSE 表示失败。接口返回失败请调用NET_DVR_GetLastError 获取错误码,通
过错误码判断出错原因。

功能说明:该结构体中的坐标值与当前预览显示框的大小有关,现假设预览显示框为352*288,我们规定原点为预览显示框左上角的顶点,前四个参数计算方法如下:
xTop = 鼠标当前所选区域的起始点坐标的值*255/352;
xBottom = 鼠标当前所选区域的结束点坐标的值*255/352;
yTop = 鼠标当前所选区域的起始点坐标的值*255/288;
yBottom = 鼠标当前所选区域的结束点坐标的值*255/288;
缩小条件:xTop减去xBottom的值大于2。放大条件:xTop小于xBottom。

函数示例:

NET_DVR_POINT_FRAME  posdata;posdata.xTop = (int)(target_tmp.x * 255 / std_cols );posdata.xBottom = posdata.xTop ;// (int)((target_tmp.x + target_tmp.width) / std_cols * 255);posdata. yTop = (int)(target_tmp.y * 255 / std_rows);posdata.yBottom = posdata.yTop  ;// (int)((target_tmp.y + target_tmp.height) / std_rows * 255);posdata.bCounter = 1;if (!NET_DVR_PTZSelZoomIn_EX(0, 1, &posdata)){auto a = NET_DVR_GetLastError();CString s;s.Format("%d", a);AfxMessageBox(s);
}

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

【总结】

第一种方法某种意义上是第二种方法的开源版本,但坐标到角度的转换方法因人而异,误差也因人而异;而自带的3D功能坐标对准十分准确,效果很好,但这同样是一个并行过程,同时还不知道函数内部具体参数值,不能有效判断结束标志,所以为后续指令操作带来一个时间上的问题。

倘若大家有更好的球机对准方法,欢迎交流讨论。

如若有以下两个函数的开源代码,望大家能够分享,一起学习。

(NET_DVR_PTZSelZoomIn与NET_DVR_PTZSelZoomIn_EX)

海康球机控制函数VC (PTZ控制+对准具体坐标点)相关推荐

  1. 海康球机DS-2DF7320拆机过程分享

    [拆机原因] 为什么要拆机呢?先说一下我遇到的问题. 球机开机自检时,水平自检故障,其余自检部分均正常(包括俯仰自检正常).自检完成后调好IP接口,调用demo控制球机,发现当给定水平移动指令时,电机 ...

  2. 海康车牌机控制道闸,并且设置车辆黑白名单。

    车牌机控制道闸,并且设置车辆黑白名单.. 基本原理,是HK车牌机识别到车辆后,控制IO控制器,吸合对应的继电器,继电器联通栏杆机的控制引脚, 栏杆机抬起道闸.车辆通过后,栏杆机受到雷达的控制,自动落杆 ...

  3. 海康工业相机功能模块-IO输入输出控制

    海康工业相机功能模块sdk调用介绍 IO输入输出控制 前言 IO输入 IO输出 前言 机器视觉行业里面,相机作为最重要的图像传感器,除了主要的拍摄功能外,它也承担了一部分信号控制功能. 一方面能够接受 ...

  4. 《球机的PTZ和视场角与ONVIF的PTZ对应关系》

    文章目录 简述 PTZ_ONVIF & PTZ_SDK 球机视场角与ONVIF对应关系 简述 不同品牌对应关系不一致,同一品牌,根据摄像头产品参数也会不一致 球机的PTZ和ONVIF的PTZ是 ...

  5. 《球机隐私遮蔽定位解析及ONVIF实现》

    隐私遮蔽 高速球摄像机实现隐私区域遮蔽 隐私区域自由选取 无论相机处于什么状态,遮蔽块能随着球机移动而移动 球机在不同位姿下的图像点坐标的实时匹配 原理推导 目前两种思路:一种是按照3D定位原理匹配: ...

  6. C#海康摄像机SDK二次开发

    海康球机设备网络SDK开发实践记录 获取PTZ参数 开发手册相关内容截图 C# 代码实现 //获取球机位置信息结构体大小 Int32 size = Marshal.SizeOf(typeof(CHCN ...

  7. 海康SDK 通过java接口设置和获取摄像机参数

    以下功能实现需要完成设备初始化,注册,监听和布防的操作,详见CSDNhttps://mp.csdn.net/mp_blog/creation/editor/121543529 海康设备登录 //设备登 ...

  8. Onvif协议学习:14、球机云台控制PTZ

    Onvif协议学习:14.球机云台控制PTZ 文章目录 Onvif协议学习:14.球机云台控制PTZ 一.介绍 二.代码实现 八个方向.放下及缩小控制 聚焦控制 原文链接:https://blog.c ...

  9. Onvif协议客户端开发(8)--球机云台的控制

    球机的云台控制 一.介绍 在安防摄像头中,不仅仅涉及到固定摄像头的枪击,同样还包含可以360°转动的球机.因此对球机的云台方向控制是Onvif协议开发过程中必不可少的过程 球机的云台控制主要包含:八个 ...

最新文章

  1. Windows平台搭建-----C语言
  2. Linux下root密码忘记的解决办法
  3. 《javascript设计模式》笔记之第七章:工厂模式
  4. linux 中php以及nginx的重启命令
  5. Linux Daemon Writing HOWTO
  6. c盘哪些文件可以删除_Win7下C盘哪些文件可以删除?
  7. java问题的英语对话_一些表达拒绝的应用英语
  8. FairMOT实时多目标跟踪
  9. 揭秘北京2022冬奥会背后的技术
  10. 使用百度API实现语音识别——in python
  11. Linux下NTP时间同步客户端配置
  12. 全国第一家FPGA云主机(FAAS)正式启动售卖,被阿里云抢先了。
  13. Python零基础入门(三)——函数[学习笔记]
  14. 良品铺子的2021:营收创新高后的“战术调整”
  15. 估值3000亿,中国最神秘电商公司,征服美国年轻人
  16. feign调用不通问题,JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r
  17. 计算机无法打开文档,电脑word文档打不开怎么办【原因分析及解决方法】
  18. 对于网站优化该怎么去做外链?
  19. 盒模型——快递比喻法
  20. 改名最成功的5所大学:改名如改命

热门文章

  1. 安卓gradle报错
  2. ElementUI入门
  3. 【Redis过期策略/内存淘汰机制/对过期Key的处理】
  4. PHP——连接数据库
  5. 【文献调研】慢病患者就医行为预测:就医选择行为有哪些?预测什么?如何预测?慢病患者?
  6. MND:canvas使用图像 Using images(五)
  7. 卧加刀库回参考点_840D卧加回装后刀库如何设置
  8. 好心情医生建议:精神病人要做好这4点
  9. Latex 插入目录时不显示“CONTENT“或“目录“
  10. 朗强科技:HDMI画面分割器原理、功能、分割模式、应用