Я решил эту проблему, используя потоки, я проверяю подключение камеры в отдельном потоке и жду некоторое время (2 секунды), если этот поток не завершается и не возвращает никакого значения, это означает, что камера не подключена. есть код
cameraOpen=true;
//first open the graphic widget to display the camera stream
ui.graphicsView->setEnabled(TRUE);
cameraIsConnected = false ;
while ((check_camera_thread()==true)&&(cameraOpen==true))
//while ((vcap.isOpened()==true)&&(cameraOpen==true))
{
if(vcap.read(image_input)==false)
{
//QmessageBox
QMessageBox msgBox;
msgBox.setText("probleme de connexion a la caméra");
msgBox.exec();
//close_camera_feed();
break;
}
vcap.set(CV_CAP_PROP_FPS, 1);
//vcap.read(image_input);
qimage_input = QImage((const unsigned char*)(image_input.data),
image_input.cols,image_input.rows,
QImage::Format_RGB888).rgbSwapped();
image = QPixmap::fromImage(qimage_input);
scene = new QGraphicsScene(this);
scene->addPixmap(image);
scene->setSceneRect(image.rect());
ui.graphicsView->setScene(scene);
//to
qApp->processEvents();
//thread t1(task1, "Hello");
detect_license_plate(image_input);
}
if(vcap.isOpened()==false)
{
QMessageBox msgBox;
msgBox.setText("La Caméra est déconnecté, vérifier l'uinstallation");
msgBox.exec();
}
vcap.release();
close_camera_feed();
}
bool check_camera_thread()
{
std::thread t0( check_camera);
Sleep(2000);
t0.detach();
return cameraIsConnected;
}
bool check_camera()
{
vcap.open(videoStreamAddress);
cameraIsConnected= true ;
return cameraIsConnected;
}