Случайный кадр Video AR Drone пуст, а затем не может получить новое изображение с OpenCV

Я делаю очень простую программу, которая печатает видео 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: Bad flag», и оно прерывается.
Соединение на AR.Drone — TCP, поэтому я не могу замедлить waitKey …

Любая идея?

0

Решение

У меня возникла такая же проблема, когда я хотел получить стабильный видеопоток с AR.Drone 2.0
Это заняло некоторое время, но я понял, что кадр отсутствует, потому что дрон считает соединение потерянным через 2 секунды без AT-команды. Поэтому, если вы открываете поток и больше ничего не делаете, это нормально (поток будет хорошим), но после отправки любой AT-команды через 2 секунды дрон отключится. Поэтому все, что вам нужно сделать, чтобы отправить, например, команду зависания дрону, если никакая другая команда не отправила, чтобы сохранить соединение живым.

0

Другие решения