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
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
@Khashayar merci pour votre commentaire, jetez un oeil à la mise à jour de la question. – Engine
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