Das Zeichnen einer Linie in OpenCV mit CV_AA-Flags erzeugt keine Anti-Alias-Linie

Ich kann cv :: line nicht dazu bringen, eine Anti-Alias-Linie mit gesetzten CV_AA-Flags zu zeichnen. Hier ist ein Beispielcode zur Veranschaulichung:

#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;
}

Ich habe versucht, cv :: Point2d anstelle von cv :: Point2i zu verwenden und keinen Unterschied festgestellt. (i == integer, d == double) Ich habe auch versucht, die Pixelbreite größer als 1 zu machen, aber es gibt immer noch keine AA.

Dies funktioniert jedoch mit einem CV_8U-Image (8-Bit-Image ohne Vorzeichen) im Gegensatz zum CV_32F-Image (32-Bit-Float-Image), das ich hier habe. (Für CV_8U müssen Sie cv :: Scalar (255) anstelle von cv :: Scalar (1.0) in die zu vergleichende Zeilenfunktion übergeben.)

Ich nehme an, dass eine aktuelle Problemumgehung darin besteht, mit einem CV_8U-Image zu beginnen und es dann zu konvertieren. Gibt es jedoch eine einfache Möglichkeit, dies mit einem CV_32F-Image zu tun, für das ich keine eigene Antialiasing-Funktion schreiben muss?

Vermisse ich etwas?

OpenCV-Dokumente:cv :: line reference

Antworten auf die Frage(2)

Ihre Antwort auf die Frage