Dessin d'une ligne dans OpenCV avec CV_AA drapeaux n'est pas de produire un anti-aliasing ligne

Je n'arrive pas à obtenir de cv::ligne pour dessiner un anti-aliasing ligne avec CV_AA indicateurs définis. Voici un code d'exemple pour illustrer:

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace std;

int main(int argc, char* argv[])
{
    cv::Mat base(100, 100, CV_32F);

    cv::Point2i p1(20, 20);
    cv::Point2i p2(70, 90);

    cv::line(base, p1, p2, cv::Scalar(1.0), 1, CV_AA); //1 pixel thick, CV_AA == Anti-aliased flag

    cv::namedWindow("line test", CV_NORMAL);
    cv::imshow("line test", base);
    cv::waitKey(0);

    return 0;
}

J'ai essayé d'utiliser cv::Point2d au lieu de cv::Point2i et n'a trouvé aucune différence. (i == integer, d == double) j'ai aussi essayé de faire du pixel de largeur plus grande que 1, mais il n'y a pas encore de AA.

Toutefois, cela ne fonctionne pas avec un CV_8U (8 bits non signé) de l'image, par opposition à CV_32F (32-bit à virgule flottante) de l'image que j'ai ici. (Pour CV_8U, vous devez transmettre cv::Scalaire(255) au lieu de cv::Scalaire(1.0) dans la fonction de comparaison)

Je suppose que d'un work-around actuel serait de commencer avec un CV_8U image puis de les convertir, mais est-il une façon simple de le faire avec juste un CV_32F image qui ne nécessitent pas de moi d'écrire mon propre anti-aliasing?

Suis-je raté quelque chose?

OpenCV docs: cv::référence de la ligne de

Il peut être un problème dans OpenCV, mais je tiens à souligner un étrange morceau de code: vous pouvez déplacer le cv::namedWindow et cv::imshow à l'extérieur de la boucle, en gardant les mêmes fonctionnalités pour beaucoup mieux la vitesse.
Ah, ouais, bon point. J'ai jeté que l'ensemble de la question.
en fait, on peut écrire c = cv::waitKey(); return 0; Lorsque vous appuyez sur une touche, waitKey() va retourner et fermer le programme.
Oui, mais vous ne pouvez pas redimensionner l'image avec le curseur de la souris et regarder de plus près de la ligne, puis. C'était le but derrière la boucle. Une alternative est d'utiliser la version letée de la fenêtre, mais je voulais garder cela simple.
Hm, je l'ai essayé et vous pouvez redimensionner la fenêtre de cette façon. Donc, vous avez eu raison. Pour d'autres applications où vous passez habituellement un certain nombre > 0 en cv::waitKey, comme le montre une vidéo, ça ne fonctionne pas, comme il n'y a plus de mises à jour après le temps imparti. Je ne me souviens pas que le fait d'être dans le passé. Modifié le code comme vous l'avez suggéré.

OriginalL'auteur Matteo Mannino | 2012-06-15