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 p>
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 . . . P>
Voici le code: p> merci d'avance p> p>
3 Réponses :
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)
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 );
}
}
}
Pour votre vecteur V, vous devez ajouter un espace comme:
vector<vector<cv::Point> > v;
Ce sont les déclarations correctes: MAT_> originalImage; MAT_ > résultantImage; Vecteur > v;