Qu'est-ce que je fais mal ici?
error: cannot convert 'std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > >' to 'const cv::Point*' in initialization
4 Réponses :
ContourLement est le vecteur de mettre p> vecteur
Merci. Mais pour la fonction, l'argument doit être un point de consct non pas un vecteur de points de const.
Analysez la ligne incriminée:
fillPoly (contourMask, elementPoints, &numberOfPoints, 1, Scalar (0, 0, 0), 8);
Merci. Cependant, sur la ligne qui indique "Const Point * ElementPoints [1] = {TMP [0]};" Je reçois l'erreur de dire "Erreur: impossible de convertir 'CV :: Pointe_
Ouais, j'ai oublié d'ajouter un & code>. Mise à jour de la réponse, veuillez le tester maintenant.
Merci. Il compile correctement, mais j'ai une question. Ne soyez-vous pas juste en avant un point singulier? Vous n'avez pas besoin de passer tous les points pour dessiner tout le polygone?
Vous dirigez vers le tout premier élément du vecteur, cependant Nombre de points code> définit le nombre d'éléments là-bas après cela. ;)
Dis, si j'ai 4 coordonnées, (x1, y1), (x2, y2), (x3, y3) et (x4, y4) comment puis-je écrire ceci sous forme de vecteur?? S'il vous plaît aider. !!!
@ karlphillip- je suis masquage image à l'aide de FillPoly.mais c'est givrng Me masque pour point (0,0) aussi.Qui n'est pas nécessaire.Tout pourquoi je reçois cela?
juste pour l'enregistrement (et parce que le docu OpenCV est très rare ici) un extrait plus réduit à l'aide de l'API C ++:
std::vector<cv::Point> fillContSingle; [...] //add all points of the contour to the vector fillContSingle.push_back(cv::Point(x_coord,y_coord)); [...] std::vector<std::vector<cv::Point> > fillContAll; //fill the single contour //(one could add multiple other similar contours to the vector) fillContAll.push_back(fillContSingle); cv::fillPoly( image, fillContAll, cv::Scalar(128));
AFAIK Cet appel de C ++ de FillPoly n'est documenté nulle part, mais c'est le moyen le plus facile et le plus intuitif de dessiner des polygones remplis!
Double >> Dans STD imbriquée :: Les vecteurs ne fonctionnent pas pour GCC. J'ai essayé d'ajouter un espace à la réponse, mais il nécessite un minimum de 6 caractères par modification.
@ LAHJATON_J; Thxs, j'ai ajouté un blanc
Joli! Je me demandais pourquoi il n'y avait pas de documentation sur cette façon de le faire. En outre, dans ce cas de contour unique, vous pouvez l'envelopper dans l'appel: FILLPOLY (image, vecteur
Certaines personnes peuvent arriver ici en raison d'un bogue apparemment dans les échantillons / cpp / create_mask.cpp de l'OpenCV. De cette façon, compte tenu de l'explication ci-dessus, j'ai édité la succursale "SI (Event == Event_RButtonup)" Direction para à:
... mask = Mat::zeros(src.size(), CV_8UC1); vector<Point> tmp = pts; const Point* elementPoints[1] = { &tmp[0] }; int npts = (int) pts.size(); cout << "elementsPoints=" << elementPoints << endl; fillPoly(mask, elementPoints, &npts, 1, Scalar(255, 255, 255), 8); bitwise_and(src, src, final, mask); ...