Chaque fois que je passe une image à cvStartFindContours, au lieu de trouver les contours, mon image devient complètement noire. Je n'ai absolument aucune idée de pourquoi. Je sais que ce n'est pas causé par une autre partie du code même si je commente tout, mais laissez dans l'appel de fonction à cvStartFindContours, mon image devient toujours noire. Cependant la seconde je commente l'appel à cvStartFindContours, mon image reste normale. Pourquoi cela arrive-t-il? L'image que je passe (skinMask) est une image 8 bits, 1 canal (IPL_DEPTH_8U) avec des données CONTAINS. (ce n'est pas noir, il y a des morceaux de blanc).Problème étrange avec cvStartFindContours?
Pourquoi mon image devient-elle noire? Merci
void connectedComponents()
{
cvMorphologyEx (skinMask, skinMask, 0, 0, CV_MOP_OPEN, 1);
cvMorphologyEx (skinMask, skinMask, 0, 0, CV_MOP_CLOSE, 1);
CvMemStorage *connectedCompStorage = cvCreateMemStorage (0);
CvSeq *temp = NULL; //used to loop through contour perimeter checking
CvSeq *connectedComp = NULL; //stores all derived connected component contours
CvContourScanner connectedCompScanner = cvStartFindContours (skinMask, connectedCompStorage); //FUNCTION CALL CAUSING PROBLEMS
while ((temp = cvFindNextContour (connectedCompScanner)) != NULL)
{
double perimeter = cvContourPerimeter (temp);
if (perimeter < CC_PERIMETER_THRESH)
{
cvSubstituteContour (connectedCompScanner, NULL);
}
else
{
temp = cvApproxPoly (temp, sizeof (CvContour), connectedCompStorage, CV_POLY_APPROX_DP, 2, 0);
cvSubstituteContour (connectedCompScanner, temp);
}
}
connectedComp = cvEndFindContours (&connectedCompScanner);
cvZero (skinMask);
for (temp = connectedComp; temp != NULL; temp = temp -> h_next);
{
cvDrawContours (skinMask, temp, cvScalar (255, 255, 255), cvScalar (0, 0, 0), -1, CV_FILLED, 8);
}
cvReleaseMemStorage (&connectedCompStorage);
}
Avez-vous déboguer le code? Est-ce que l'un des contours a un périmètre plus grand que votre seuil? – Adrian