1

Ich benutze OpenCV4Android Version 2.4.11. Ich lese Bilder von der Kamera und ich erkenne beliebige rechteckige Formen im Rahmen. Dann versuche ich ein halbtransparentes Rechteck um ein erkanntes Objekt zu zeichnen.Wie zeichne ich ein Rechteck durch Angabe seiner 4 Ecken

was ich tun möchte, ist, ein halbtransparentes Rechteck zu zeichnen, gegeben die vier Ecken des erkannten Objekts. Aber in openCV können Sie ein Rechteck zeichnen, indem Sie nur zwei Punkte "the topLeft" und "BottomRight" angeben.

Bitte lassen Sie mich wissen, wie man ein Rechteck zeichnet, indem man die vier Ecken davon NICHT nur durch Angabe der topLeft- und BottomRight-Ecken festlegt.

das unten geschrieben Bild ist es, Ihnen meine Versuche zu zeigen und Ihnen zu zeigen, dass das, was ich will ein Rechteck um die vier erfaßten Ecken zu zeichnen ist „rot, grün, blau, weiß“

Bild:

enter image description here

+0

Sie werden ein Polygon Angabe der vier Punkte ziehen müssen. Schau mal hier [http://docs.opencv.org/2.4/doc/tutorials/core/basic_geometric_drawing/basic_geometric_drawing.html], dort gibt es einen Abschnitt zum Zeichnen von Polygonen – Klaus

+0

@Klaus kannst du mir bitte ein Beispiel geben wie das Polygon zeichnen? Ich habe es gegoogled, aber wie für die Java-API für opencv muss ich eine Liste von matOfPoints spceify, während ich nur Punkt der Ecken habe – user2121

+0

Ich bin nicht in der Lage, Ihr Problem jedoch [hier] (http://stackoverflow.com)/questions/9082204/opencv-draw-a-white-filled-polygon) ist ein Link zu einer ähnlichen Frage zu SO. Schau dir die Frage an, nicht die Antwort, der Unterschied ist nur, dass er in der Antwort eine Übersetzung mit den Punkten macht, die du nicht benötigst. – Klaus

Antwort

1

OpenCV bietet keine Rechteck Zeichnungsfunktion, aber Sie können die oben links und unten rechts Punkte mit den 4 Punkte erzeugen, die Sie berechnet haben:

Angenommen, Ihre 4 Punkte sind - (tlx,tly),(trx,try),(blx,bly) und (brx,bry) wobei tl oben links und br unten rechts steht.

Dann können Sie berechnen:

x1=min(tlx,trx,brx,blx);//top-left pt. is the leftmost of the 4 points 
x2=max(tlx,trx,brx,blx);//bottom-right pt. is the rightmost of the 4 points 
y1=min(tly,try,bry,bly);//top-left pt. is the uppermost of the 4 points 
y2=max(tly,try,bry,bly);//bottom-right pt. is the lowermost of the 4 points 

Dies wird unter der Annahme, dass der Punkt (0,0) in der oberen linken auftritt. Jetzt können Sie verwenden:

rectangle(src, Point(x1,y1), Point(x2,y2),Color,Thickness,other_params); 
0

gleiche Idee wie @Saransh, sondern kompiliert für mich:

auto x1 = std::min(tlx, std::min(trx, std::min(brx, blx))); // top-left pt. is the leftmost of the 4 points 
auto x2 = std::max(tlx, std::max(trx, std::max(brx, blx))); // bottom-right pt. is the rightmost of the 4 points 
auto y1 = std::min(tly, std::min(try, std::min(bry, bly))); //top-left pt. is the uppermost of the 4 points 
auto y2 = std::max(tly, std::max(try, std::max(bry, bly))); //bottom-right pt. is the lowermost of the 4 points 
Verwandte Themen