The CDB process terminate

image
Hello,
I coded a program to record a video stream under Qt. To respond to my needs, I see your library : OpenCV
I recently had a problem with OpenCV. Indeed, when I run my program in Debug mode, I get the following error: The CDB process terminated.

Here is my program (in French sorry).

/*
Le programme a été crée dans le cadre du projet de BTS SNIR de 2022 : Vidéo tennis (TCT_TV)
Un club de tennis souhaite pouvoir filmer la session de ses adhérents afin de pouvoir ensuite les aider à
progresser. Ceci est donc à but pédagogique.

Ce programmme permet de remplir diverses fonctions présentes dans le Cahier des Charges (CdC).
    - Il permet entre autre d'enregistrer un flux vidéo durant une durée déterminée
    - Visionner le flux qui sera enregistré
    - Il possède un delai avant l'enregistrement

Le tout est une fonction qu'il vous faudra appeller. Pour des raison de simplicité, celle-ci est appellé à la fin du code (ligne 234)
*/

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <thread> // sleep_for, sleep_until
#include <QDate> // pour gérer ce qui est de la date
#include <QFile> // Vérifier les noms de fichier
#include <iostream>
#include <QDebug>

#include <opencv2/opencv.hpp>
using namespace std;

int TempsEnregistrement(int temps) // Permet d'attribuer automatiquement le nombre d'image lors de l'enregistrement d'image plutôt que de mettre un nombre fixe
{
    int i;
    i = temps * 60 *25; // calcul
    return i;
}


void Enregistrement(string Nom, int Temps)
{
    ///======================================== OUVERTURE FLUX VIDEO ========================================///
    //cgi-bin/faststream.jpg --> Common Gateway Interface (Interface de passerelle commune),
    //stream=half&
    //&rand=COUNTER -->obligatoire

        std::this_thread::sleep_for(1s); // gérer le temps d'attente avant le lancement de la caméra

        cv::VideoCapture cap("rtsp://172.17.50.235:8554/1.3gp",cv::CAP_FFMPEG); //caméra IP SNIR
        if (!cap.isOpened()) // cap est un attribut protégé
        {
            qDebug("Camera non ouverte !"); //Impossibilité d'ouvrir la caméra
        }
    //==========================================================================================================//

        cv::Mat Frame; // // Mat pour matrice --> Contient info (taille de la matrice / la méthode use pour le stockage, à quelle adresse est la matrice stockée)
        // La taille de la matrice elle-même peut varier d’une image à l’autre.
        // Def pointeur de données matricielles ? Ce sont les données uchar*, qui pointent vers les données de la matrice.
        // Avantage de 2 parties? Nous pouvons faire une copie superficielle d’une matrice et utiliser un compteur de référence pour la gestion de la mémoire.

        //Comptage de références --> technique consistant à stocker le nombre de références, de pointeur.

        cv::Mat im;

    ///======================================== DÉFINITION TAILLE / FRAME IMAGE ========================================///
        int frameWidth = cap.get(cv::CAP_PROP_FRAME_WIDTH); // Largeur
        int frameHeigth = cap.get(cv::CAP_PROP_FRAME_HEIGHT); // Hauteur
        //int frameRate= cap.get(cv::CAP_PROP_FPS); // nombre de FPS
    //===================================================================================================================//


    ///======================================== GÉRER LE NOMBRE DE SESSION ========================================///
        // four cc --> Concatène 4 caractères en un code fourcc --> identifier le format d'une vidéo
        // la caméra étant en 3GP, il est mieux d'eregistrer en .avi et cela oblige d'utiliser le codec PIM1

        //.mp4 --> fourcc('M','P','4','V')
        //.avi --> fourcc('J','P','E','G')


        //afin de savoir si un fichier existe
        QString Nom1=QString::fromStdString(Nom); // QFile prends des QStrings donc on fait une conversion de string en QString
        bool Vid1, Vid2;
        Vid1 = QFile::exists(Nom1+"1.avi"); // fichier 1 existe ?
        Vid2 = QFile::exists(Nom1+"2.avi"); // Fichier 2 existe ?


    ///======================================== Session 1 ========================================///
        if((Vid1==false) && (Vid2==false))
        {
            qDebug("\nLe fichier n'existe pas --> creation d'un fichier d'enregistrement\n");
            cv::VideoWriter output(Nom+"1.avi",cv::VideoWriter::fourcc('P','I','M','1'),25,cv::Size(frameWidth,frameHeigth),true); // 25 : nombre de FPS

            if (!output.isOpened())
            {
                qDebug("Impossible d'ouvrir le flux video... (vérifiez l'adresse IP de la caméra)"); // Ouverture du flux vidéo impossible
            }

            //========== Boucle d'enregistrement ==========//

            TempsEnregistrement(Temps);
            int images = TempsEnregistrement(Temps); // Nombre d'image à enregistrer

            while(images)
            {
                cap.read(Frame); //lecture des image

                if (Frame.empty()) //Si plus aucune image -> break
                {
                    qDebug("\nPlus aucune image recuperable\n");
                    break;
                }

                cv::imshow("Enregistrement Video (session 1)",Frame); //afficher l'image + le titre : enregistrement vidéo.
                output.write(Frame); //écriture image par image

                if (cv::waitKey(5)==27) //Presser esc pour fermer la fenêtre (ascii décimal).
                {
                    qDebug("\n\nLa touche 'echap' a été appuyee. Arret de l'enregistrement en cours.");
                    break;
                }

                images--; //décrémentation du nombre d'image
            }
            qDebug("\nFin de recuperation des images \n");

            //=============== Libération image / sorties ===============//
            cap.release(); // "libération" des images
            output.release(); // libérer les sorties
            qDebug("Programme termine, fermeture de toutes les fenetres");

            cv::destroyAllWindows(); //fermer toutes les fenêtres
        }


    ///======================================== Session 2 ========================================///
        if((Vid1==true) && (Vid2==false))
        {
            qDebug("\nLe fichier existait déjà --> creation d'un second fichier d'enregistrement\n");
            cv::VideoWriter output(Nom+"2.avi",cv::VideoWriter::fourcc('P','I','M','1'),25,cv::Size(frameWidth,frameHeigth),true); // 25 : nombre de FPS

            if(!output.isOpened())
            {
                qDebug("Impossible d'ouvrir le flux video... (vérifiez l'adresse IP de la caméra)"); // Message erreur si ouverture du flux vidéo impossible
            }

            //========== Boucle d'enregistrement ==========//
            int images = TempsEnregistrement(1); // Nombre d'image à enregistrer --> cf fonction TempsEnregistrement

            while(images)
            {
                cap.read(Frame); //lecture des image
                if (Frame.empty()) //Si plus aucune image -> break
                {
                    qDebug("\nPlus aucune image recuperable\n");
                         break;
                }

                cv::imshow("Enregistrement Video (Session 2)",Frame); //afficher l'image + le titre : enregistrement vidéo.
                output.write(Frame); //écriture image par image

                if (cv::waitKey(5)==27) //Presser esc pour fermer la fenêtre (ascii décimal).
                {
                    qDebug("\nLa touche \"echap\" a été appuyee. Arret de l'enregistrement en cours.");
                    break;
                }

                images--; //décrémentation du nombre d'image
            }
            qDebug("\nFin de recuperation des images \n");

            //=============== Libération image / sorties ===============//
            cap.release(); // "libération" des images
            output.release(); // libérer les sorties
            qDebug("Programme termine, fermeture de toutes les fenetres");

            cv::destroyAllWindows(); //fermer toutes les fenêtres
        }




        ///======================================== Session 3 ========================================///
            if((Vid1==true) && (Vid2==true))
            {
                qDebug("\n2 fichiers existent déjà --> écrasement du premier fichier d'enregsitrement\n");
                cv::VideoWriter output(Nom+"1.avi",cv::VideoWriter::fourcc('P','I','M','1'),25,cv::Size(frameWidth,frameHeigth),true); // 25 : nombre de FPS

                if(!output.isOpened())
                {
                    qDebug("Impossible d'ouvrir le flux video... (vérifiez l'adresse IP de la caméra)"); // Message erreur si ouverture du flux vidéo impossible
                }

                //========== Boucle d'enregistrement ==========//
                int images = TempsEnregistrement(1); // Nombre d'image à enregistrer

                while(images)
                {
                    cap.read(Frame); //lecture des image
                    if (Frame.empty()) //Si plus aucune image -> break
                    {
                        qDebug("\nPlus aucune image recuperable\n");
                             break;
                    }

                    cv::imshow("Enregistrement Video (Session 3)",Frame); //afficher l'image + le titre : enregistrement vidéo.
                    output.write(Frame); //écriture image par image

                    if (cv::waitKey(5)==27) //Presser esc pour fermer la fenêtre (ascii décimal).
                    {
                        qDebug("\nLa touche \"echap\" a été appuyee. Arret de l'enregistrement en cours.");
                        break;
                    }

                    images--; //décrémentation du nombre d'image
                }
                qDebug("\nFin de recuperation des images \n");

                //=============== Libération image / sorties ===============//
                cap.release(); // "libération" des images
                output.release(); // libérer les sorties
                qDebug("Programme termine, fermeture de toutes les fenetres");

                cv::destroyAllWindows(); //fermer toutes les fenêtres
            }
};


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent), ui(new Ui::MainWindow)
{
    Enregistrement("THEROND", 1);
    ui->setupUi(this);
}


MainWindow::~MainWindow()
{
    delete ui;
}

this is the forum for OpenCV.

since you need support with Qt Creator (your debugger crashed), you should seek help in the Qt forum