我正在做一个项目,需要通过用户界面控制我的网络摄像机的 PTZ 功能。我目前正在使用 D-Link DCS-5020L 云摄像头、Microsoft Visual Studio 2017 和 OpenCV 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/