Ich benutze OpenCV, um eine Linie aus einer Menge von Punkten mit cvFitLine()
cvFitLine()
gibt einen normalisierten Vektor zurück, der zu der Linie und einem Punkt auf der Linie kolinear ist.
Siehe Details hier
Wie kann ich mit dieser Information die Gleichung einer Linie erhalten, so dass ich die Linie zeichnen kann?
Wenn cvFitLine()
den normalisierten Vektor (vx,vy)
und den Punkt (x0,y0)
zurückgibt, ist die Gleichung der Zeile
(x, y) = (x0, y0) + t * (vx, vy)
wobei t
von -∞ bis + ∞ läuft.
Das ist das, wonach Sie gefragt haben, aber es ist wahrscheinlich nicht sofort hilfreich beim Zeichnen der Linie. Sie möchten es entweder an die Bildschirmgrenzen oder vielleicht an die Begrenzungsbox des ursprünglichen Satzes von Punkten anhängen. Um eine Linie zu einem Rechteck zu schneiden, lösen Sie einfach nach Werten von t
, wobei die Linie die Grenze des Rechtecks kreuzt.
Ich habe eine ähnliche Strategie wie Karpathy benutzt, aber eine zusätzliche Funktion benutzt. Wie Sie sehen können, verwende ich cvClipLine, um die Linie auf die Größe des Bildes zu trimmen, was unnötig ist, aber ein wenig nette Details hinzufügt.
Auch der Multiplikator ist hier definiert als theMult = max (img- & gt; height, img- & gt; width), so dass wir keine Zahlen bekommen, die eines Tages überlaufen könnten oder so etwas.
%Vor%Wir verwenden eine "Vec4f fitedLine"; für angepasste Linie In fitLine haben wir 4 Parameter wenn wir die Linienbeziehung az unten betrachten: Y - Y0 = M (X - X0)
wir haben Y0 = FitedLine [3]; X0 = FitedLine [2]; m = FitedLine [1] / FitedLine [0];
damit wir eine Liniengleichung haben, können wir andere Punkte darauf finden.