【问题标题】:Converting x/y values from on screen click to ONVIF PTZ pan/tilt values将 x/y 值从屏幕点击转换为 ONVIF PTZ 平移/倾斜值
【发布时间】:2021-08-02 21:48:26
【问题描述】:

我目前的任务是在 C# 中为 Onvif 摄像机实现一些 PTZ 操作。我的相机有 360 度平移、220 度倾斜、63 度水平 FOV 和 37 度垂直 FOV。

现在,我目前在 WPF 中有一个视频源,可以显示 FOV 内的所有内容。我希望能够将相机对准我点击的任何位置。我可以轻松获得点击的 x/y 坐标,但我不确定如何进行有意义的转换。

ONVIF API 接受 X 和 Y 介于 -1 和 1 之间的 Pan 和 Tilt 向量。我可以收集的关于相机馈送的唯一数据是它的当前 X 和 Y 向量(介于 -1 和 1 之间),即视频输入 X 和 Y(像素),以及我点击的点的 X 和 Y。

我已经尝试了所有我能想到的计算来获得一个相对移动或绝对移动的向量。我使用来自this post 的评论来计算基于像素增量的度数增量,但结果似乎并不接近。我使用this post 中的公式来获得平移和倾斜值,但我不太确定如何以有用的方式使用结果。

我尝试获取距离百分比并将其应用于当前位置矢量,但也没有成功。

我猜我最好的选择是找到一个相对移动,因为找到一个只有 FOV 的绝对向量似乎很困难。如果有人对我如何在没有太多麻烦的情况下计算它有任何见解,将不胜感激。

【问题讨论】:

    标签: .net camera onvif


    【解决方案1】:

    我解决了这个问题,而且解决方案比我想要实现的要简单得多。答案不是一些复杂的公式,而是对 Onvif 规范的理解。对于任何有类似问题的人,我会解释我做了什么。

    Onvif 有几个不同的空间用于绝对和相对平移,x 和 y 的默认值为 [-1, 1]。但是,您可以为翻译提供不同的空间。您可以在 GetConfigurationOptions 返回的对象中看到允许的空格,该对象采用配置令牌。您可以使用 GetConfigurations 获取所有配置令牌,如果您不确定如何获取一个,请选择其中一个。

    从那里,选择一个适合并观察 X 和 Y 的最大值和最小值的比例。就我而言,最简单的方法是使用让我在 FOV 内进行相对平移的空间。从那里您只需要使用您喜欢的任何方法仔细计算中心和点击之间的增量,并在 [-1, 1] 之间创建一些值。 ONVIF 服务规范对此有更多信息。

    【讨论】:

    • 我知道这个问题已经过时了,但目前,我遇到了同样的问题,在任何地方都找不到答案。我有一台摄像机,POV 水平为 55 度,垂直为 33 度,图像尺寸为 640x480。此相机使用的跨空间为 [-1, 1]。如果我想计算相机的移动以坐标为 (100, 200) 的点为中心,由于你所说的,我该怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    相关资源
    最近更新 更多