У меня была проблема, когда я начал знакомиться с OpenCV в C ++.
Сначала я успешно подключился и отобразил IP-камеру через RTSP. Я отключился через короткий промежуток времени (<30 с), он автоматически подключился. Но время для большого отключения (> = 30 с) программа прерывает и завершает. Потому что я хочу, чтобы поток автоматически постоянно переподключался, не прерывая работу программы. Когда камера включена, кадры помещаются в очередь и затем отображаются (imshow). Если кадр пуст, я оставляю значение «sleep (10)» и жду, пока в очередь не будет записан новый кадр для отображения.
К сожалению, я не очень хорош в коде C ++ и имею тольконачал изучать неделю.
Это первый код, который я обнаружил. Мне удалось только временно отключиться за то короткое время, что я смотрел онлайн
#include <iostream>
#include <thread>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace std;
using namespace cv;
class Camera
{
public:
static void display(int i)
{
VideoCapture cap(0);
if (!cap.isOpened())
{
cout << "Disconnect Camera" << endl;
exit(-1);
}
Mat frame;
namedWindow("Display Camera", WINDOW_AUTOSIZE);
while (true)
{
bool success = cap.read(frame);
if (!success)
{
cout << "Disconnected" << endl;
break;
}
imshow("Display Camera", frame);
if (waitKey(1) >= 0)
{
break;
}
}
}
};
int main()
{
thread myThread(bind(Camera::display, 0));
myThread.join();
return 0;
}
И я нашел документ по этой ссылке. Но я не могу исправить, как переместить код из функции run в main функцию, как в упомянутом комментарии HERE
Iнадеюсь, кто-то может помочь моей проблеме. Все предложения и помощь с благодарностью. Большое спасибо: D!