Video AR Drone的随机帧为空,然后无法使用OpenCV获取新图像

时间:2014-05-16 18:36:25

标签: c++ opencv tcp ar.drone

我正在做一个非常简单的程序,可以在我的计算机上打印AR.Drone视频。

它在几秒钟内运行良好然后,随机,程序中止,因为帧是空的。我决定测试它,但现在,当一个帧为空时,以下所有帧都是空的。

这是我的简单代码:

int main(void)
{
  cv::VideoCapture cap;
  cv::Mat image;

  if (!cap.open("tcp://192.168.1.1:5555"))
    {
      printf("AR.Drone ERROR CONNECT\n");
      return -1;
    }

  takeoff();

  while (42)
    {
      cap >> image;

      if (!image.empty())
        {
           cv::imshow("AR.Drone", image);
           std::cout << "OK" << std::endl;
        }
      else
        std::cout << "ERROR" << std::endl;
      cv::waitKey(1);
    }    
  return 0;
}

我的输出是:

>OK
>OK
>[...]
>OK
>ERR
>ERR
>ERR

但它应该是:

>OK
>OK
>[...]
>OK
>ERR   // okay you got an error ? ...
>OK    // ... I give you a new frame :)
>OK

为什么会永远失败?

如果我不保护它,我会收到错误“OpenCV Error:Bad flag”并且它会中止。 AR.Drone上的连接是TCP,因此我无法减慢waitKey ......

任何想法?

1 个答案:

答案 0 :(得分:0)

当我想用AR.Drone 2.0获得稳定的视频流时,我遇到了同样的问题 花了一些时间,但我意识到丢失的帧是因为无人机在没有AT命令的情况下认为连接丢失了2秒。因此,如果你打开流并且什么也不做,那就没关系了(流将是好的),但是在你发送任何AT命令之后,2秒之后无人机就会断开连接。因此,如果没有其他命令发送以保持连接活动,您需要做的就是将例如hovering命令发送到无人机。