2013-07-23 5 views
-1

J'ai un programme de recherche de contours basé sur opencv, maintenant j'essaye d'obtenir le nombre de coins dans chaque contour fondé using le détecteur de coins de Harris, mon problème est que je dois obtenir un éléments des contoursdes contours à cv :: Mat

............................ 
std::vector<std::vector<cv::Point>> contours; 
........................... 
    for (int i =0;i <contours.size(); i++){ 
      if(!contours[i].empty()){ 
       Harris.detect(cv::Mat(contours[i])); // here crashes the program because the dimensions don't fit ???? 
       Harris.getCorners(approx,0.4); 
      std::cout <<"size \n"<< approx.size()<<std::endl; 
      } 
     } 
......................... 

MISE à JOUR

J'ai vérifié à nouveau le code et le plantage du programme dans cette partie de la classe Harris:

void HarrisDetector::detect(const cv::Mat& image) { 
     // Harris computation 
     cv::cornerHarris(image,cornerStrength, // here crashs the program 
      neighbourhood,// neighborhood size 
      aperture,  // aperture size 
      k);   // Harris parameter 

    // internal threshold computation 
    double minStrength; // not used 
    cv::minMaxLoc(cornerStrength,&minStrength,&maxStrength); 
    //local maxima detection 
    cv::Mat dilated; // temporary image 
    cv::dilate(cornerStrength,dilated,cv::Mat()); 
    cv::compare(cornerStrength,dilated,localMax,cv::CMP_EQ); 
    } 

tout IDEAA

+2

Le problème que vous avez, c'est que Harris Corners travaille sur des images et pas simplement sur Mat! mais en faisant un tapis hors des contours [i] vous avez une image incomplète qui cause l'erreur. – Khashayar

+0

@Khashayar merci pour votre commentaire, jetez un oeil à la mise à jour de la question. – Engine

+0

Comme je l'ai dit ce que vous faites pour trouver les coins d'un contour n'est pas possible avec cornerHarris! vérifiez ici pour un exemple CornerHarris http://docs.opencv.org/doc/tutorials/features2d/trackingmotion/harris_detector/harris_detector.html – Khashayar

Répondre

1

Vous pouvez utiliser l'argument method en fonction cv::findContours une certaine approximation, puis utilisez le contours[i].size() pour obtenir un certain nombre de coins.

+0

J'ai déjà utilisé la méthode cv :: findContours pour obtenir les contours non je veux travailler avec chaque vecteur de points, donc chaque vecteur doit être un type cv :: Mat – Engine