8
votes

Problème de fonction OpenCV FindContours

J'essaie d'utiliser la fonction FindContours dans OpenCV, mais vs 2008 donne une erreur disant:

Erreur OpenCV: mauvais drapeau (paramètre ou champ de structure) (non reconnu ou sans contenu Type de tableau ED) dans une fonction inconnue, fichier ........ \ ocv \ opencv \ src \ cxcore \ cxarr ay.cpp, ligne 2476

Cette application a demandé à l'exécution de le terminer de manière inhabituelle. Veuillez contacter l'équipe de support de l'application pour plus d'informations. Appuyez sur n'importe quelle touche pour continuer . . .

Voici le code: xxx

merci d'avance


1 commentaires

Ce sont les déclarations correctes: MAT_ > originalImage; MAT_ > résultantImage; Vecteur > v;


3 Réponses :


3
votes

FindContours accepte uniquement l'image binaire. C'est-à-dire une image qui est sortie de cvthreshold CvadapIvethridhold cvcanny

Essayez d'ajouter cette déclaration avant CV :: FindContours P>

cvThreshold(originalImage,resultingImage,100,100,CV_THRESH_BINARY) 


0 commentaires

3
votes

J'ai eu le même problème (ou au moins un similaire) avec cette fonction. Je n'ai pas pu résoudre le problème, alors j'ai utilisé l'ancienne fonction CVFindContours de style C à la place. J'ai inclus un exemple de fonction dans lequel j'ai utilisé la fonction CVFindContours pour nettoyer une image de blob. Cela pourrait ne pas être la solution la plus rapide, mais chez leas, cela fonctionne.

void filtBproject(Mat& Bproject){

    Scalar          color       = CV_RGB(255,255,255); // text color
    IplImage*       BprojectIpl =  &IplImage(Bproject);
    CvMemStorage*   storage     = cvCreateMemStorage(0);
    CvSeq*          contours    = 0;
    int             numCont     = 0;
    int             contAthresh = 45;

    numCont= cvFindContours( BprojectIpl, storage, &contours, sizeof(CvContour),
                    CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );

    cvSet(BprojectIpl, cvScalar(0,0,0));
    for( ; contours != 0; contours = contours->h_next )
        {

            if ( (cvContourArea(contours, CV_WHOLE_SEQ) > contAthresh) ){
                cvDrawContours( BprojectIpl, contours, color, color, -1, CV_FILLED, 8 );
            }
        }
}


0 commentaires

1
votes

Pour votre vecteur V, vous devez ajouter un espace comme:

vector<vector<cv::Point> > v;


0 commentaires