Ich benutze C++ mit OpenCV 3.0, um eine grundlegende Form von SimulCam zu erstellen.Wie finde ich heraus, ob der Objektball, den ich aufspüre, eine von mir gezeichnete Linie kreuzt?
Ich bin derzeit auf der Suche nach einer Möglichkeit zu überprüfen, wenn der Objektball mit einer Linie, die ich auf das Ausgabefenster gezeichnet haben gekreuzt/geschnitten wurde.
Der Ball wird verfolgt mit Konturen, und ich möchte schließlich die genaue Frame-Nummer, die dieser Schnittpunkt passiert.
Aber zuerst würde ich gerne verstehen, wie man den Check durchführt, um zu sehen, wann der Objektball die gezeichnete Linie überquert hat.
Scene with ball moving towards line
Ich habe die Konturen für das Objekt, würde ich verstehen, wie die Prüfung einer Kreuzung durchzuführen.
-Code für Konturen zu finden und Objektverfolgung:
findContours(resizedThresh, contourVector, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
contourVector.resize(contourVector.size());
line(resizedF_Fast, Point(300, 0), Point(300, 360), Scalar(255), 2, 8);
for (size_t i = 0; i < contourVector.size(); i++) {
approxPolyDP(Mat(contourVector[i]), contourVector[i], 0.01*arcLength(contourVector[i], true), true);
double area = contourArea(contourVector[i]);
if (contourVector[i].size() > 5 && (area > 200)) {
++circlesC;
drawContours(resizedF_Fast, contourVector, i, Scalar(255, 255, 255), 2, CV_AA, hierarchy, abs(1));
searchForMovement(resizedThresh, resizedF_Fast);
}
}
Ich habe einige andere Forschung getan, und ich habe mich in mit lineIterator, aber ich bin nicht ganz sicher.
Entschuldigung für den möglichen rohen Code, Anfänger hier. Jede Hilfe würde sehr geschätzt werden.
Wie ist Ihre Linie definiert? Ist es immer vertikal oder kann es alles sein? – Sunreef
In diesem Fall ist die Linie immer vertikal. Weiter unten auf der Linie würde es sich ändern, um ein extrahiertes Merkmal von einem Rahmen zu sein, d. H. Eine Start-Ziellinie in der Szenerie usw. – AnthonyGR1