OpenCV Zeichnung Bounding-Box-Mittelpunkt
Ich versuche zu zeichnen, einen Punkt in der Bounding Box darstellen, der den Mittelpunkt der box.
Ich habe berechnet den Mittelpunkt, sondern es wird nur ausgegeben, in der Sie CMD ein und ich nicht, dass dieser Punkt sichtbar auf einem Bild.
Arbeite ich mit OpenCV2.4.3 zu Visual Studio 2010 C++
for(int i= 0; i < boundRect.size(); i++ )
{
//BoundingBox Area
boundingBoxArea.clear();
boundingBoxArea.push_back(Point2f(boundRect[i].x, boundRect[i].y));
boundingBoxArea.push_back(Point2f(boundRect[i].x + boundRect[i].width, boundRect[i].y));
boundingBoxArea.push_back(Point2f(boundRect[i].x + boundRect[i].width, boundRect[i].y + boundRect[i].height));
boundingBoxArea.push_back(Point2f(boundRect[i].x, boundRect[i].y + boundRect[i].height));
double area0 = contourArea(boundingBoxArea);
cout << "area of bounding box no." << i << " = " << area0 << endl;
//Bounding Box Centroid
area0 = (boundRect[i].x + boundRect[i].width)/2, (boundRect[i].y + boundRect[i].height)/2;
cout<<"Rectangle " <<i<< " Centroid possition is at: " "=" <<area0<<endl;
cout<<""<<endl;
cout<<""<<endl;
}
Oben ist der code, den ich benutze auch nur ein kleiner Teil, aber ein Teil, der verantwortlich ist für die Berechnungen der Bounding-Boxen
Du musst angemeldet sein, um einen Kommentar abzugeben.
oh, Sie schon berechnet die Fläche, und jetzt sind Sie versuchen, assing Zentrum(Punkt), um das ? oh, Nein. ersetzen Sie Ihre letzten Zeilen mit:
auch, Ihre boundingBoxArea ist falsch. nehmen Sie die original-boundingRect[i] statt (für die Berechnung der area), bitte!
Alternative
Verwendung Momente der code kann auch Aussehen wie folgt (java, nicht getestet):
Hintergrund
Bild Momente Ihnen helfen, zu berechnen, einige Funktionen wie die Mitte der Masse des Objekts, Fläche des Objekts usw. Überprüfen Sie heraus die wikipedia Seite auf das Bild, Momente
Schwerpunkt ist gegeben durch die Beziehungen, Cx=M10/M00 und Cy=M01/M00.
Siehe OpenCV tutorial hier.
OK Jungs ich es geschafft, mein eigenes problem lösen auf meinem eigenen ich fühle mich stolz, hehe 😀
Ich veröffentlicht, dass die Gleichung es selbst falsch war, denn ich war die Aufteilung, dass die x - & Breite und y & mit denen war falsch das offset gegeben durch x & y falsch war. Also änderte ich den code um, so dass ich nur teilen-Breite/2 und Höhe/2
Die Letzte Zutat für die Lösung war die Verwendung der cv::Kreis (); - Funktion, die ich verwendet, um zu zeichnen, den Mittelpunkt.
HOFFNUNG, DIES KÖNNTE HELFEN, EINIGE MENSCHEN EINIGE TAG 😀
thx an @berak
Endergebnis: