c++ - C++控制网络摄像机的云台功能

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

我正在做一个项目,需要通过用户界面控制我的网络摄像机的 PTZ 功能。我目前正在使用 D-Link DCS-5020L 云摄像头、Microsoft Visual Studio 2017OpenCV 3.3 进行设置。

我对 C++ 和 OpenCV 还是个新手,但我的项目需要使用它。我能够访问相机提要,但我不确定如何通过 OpenCV 使用 C++ 代码控制相机的功能,或者是否甚至需要 OpenCV。

是否有C++代码来控制网络摄像机的云台功能?

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

// 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;
    }
}

感谢任何帮助。谢谢。

最佳答案

通常,云台功能是在摄像机中运行的服务器上实现的软件。 一些旧相机过去常常附带 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

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

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

现在,回到您的问题。在 C++ 中控制 PTZ 所需要做的就是通过网络查询提到的 url。所以这应该是您的搜索点。

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

关于c++ - C++控制网络摄像机的云台功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46557735/

相关文章:

c++ - 使用 LibTar 提取文件

c++ - 如何将二维数组的指针作为函数的参数

c++ - 如何在循环中使用 OpenCV 记住以前的图像?

python opencv去除图像中的噪声

c++ - lambda比较是确定性的吗?

opencv - pkg-config 错误

c++ - 为什么 sleep_for 调用 FreeLibrary?

c++ - 一个棘手的 OOP 问题,我从来没有想过

c++ - 当其他构造函数存在时,为什么 "ctor() = default"会改变行为?

c++ - 与 fgetc() 一起使用的整型变量