使用C ++控制IP摄像机的PTZ功能

时间:2017-10-04 05:40:25

标签: c++ opencv visual-c++ controls ip-camera

我正在开发一个项目,需要通过UI控制我的IP摄像机的PTZ功能。我目前正在使用 D-Link DCS-5020L 云端摄像头, Microsoft Visual Studio 2017 OpenCV 3.3 进行设置。

我还是c ++和OpenCV的新手,但我的项目需要使用它。我可以访问摄像头输入,但我不知道如何通过OpenCV使用C ++代码控制摄像头的功能,或者甚至是否需要OpenCV。

是否有C ++代码来控制IP摄像机的PTZ功能?

如果需要,这是我获取视频输出的代码。

// VIDEO CAPTURE //

Mat frame;

VideoCapture cap("http://username:password@IPADDRESS:PORT/video.cgi?resolution=640x360&req_fps=30&.mjpg");

if (!cap.isOpened())    //EXIT PROGRAM IF FAILED
{
    cout << "CAMERA UNAVAILABLE" << endl;
    return -1;
}
while (1)
{
    bool bSuccess = cap.read(frame);    //READ NEW FRAME FROM VIDEO

    if (!bSuccess)      //BREAK LOOP IF FAILED
    {
        cout << "UNABLE TO DISPLAY VIDEO" << endl;
        break;
    }
}

感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

通常,PTZ功能是在凸轮中运行的服务器上实现的软件。 一些旧相机过去常带有activeX控件。 可以通过获取或发布相对于相机的URL来访问这些功能。

对于您的相机,您应该可以在以下网址上发布控件:

http://<ip>/pantiltcontrol.cgi

Available controls: 
POST parameters
PanSingleMoveDegree (default 5)  
TiltSingleMoveDegree (default 5) 
PanTiltSingleMove

Values for PanTiltSingleMove (based on the web UI controls):
Top 1
Top right   2
Right   5
Bottom right    8
Bottom  7
Bottom left 6
Left    3
Top left    0
Home (reset)    4

因此,使用curl更改平移的典型示例应与此类似:

curl --user <username>:<password> --user-agent "user" --data "PanSingleMoveDegree=5&TiltSingleMoveDegree=5&PanTiltSingleMove=5" http://<ip>/pantiltcontrol.cgi

要使用您的网络浏览器进行快速测试,您应该能够使用以下结构化网址的获取请求执行相同的操作:

http://<username>:<password>@<ip>/pantiltcontrol.cgi?PanSingleMoveDegree=5&TiltSingleMoveDegree=5&PanTiltSingleMove=5

现在,回到你的问题。你需要在C ++中控制PTZ,就是在网上查询提到的网址。所以这应该是你的搜索点。

此主题的许多答案已经在堆栈溢出。这是我在google搜索时得到的第一个结果&#34; c ++ http get post&#34;。     How do you make a HTTP request with C++?