Ich habe Fahrzeuge als Blob in OpenCV erkannt. Unten ist die blob.h DateiFahrzeuggeschwindigkeit Schätzung über Blob
class Blob {
public:
// member variables
std::vector<cv::Point> currentContour;
cv::Rect currentBoundingRect;
std::vector<cv::Point> centerPositions;
double dblCurrentDiagonalSize;
double dblCurrentAspectRatio;
bool blnCurrentMatchFoundOrNewBlob;
bool blnStillBeingTracked;
int intNumOfConsecutiveFramesWithoutAMatch;
cv::Point predictedNextPosition;
// function prototypes
Blob(std::vector<cv::Point> _contour);
void predictNextPosition(void);
};
Welchen Algorithmus soll ich verwenden, um die Geschwindigkeit des erkannten Fahrzeugs zu schätzen ??
Vielen Dank im Voraus.
UPDATE
Hier ist der Code habe ich versucht, die Geschwindigkeit zu schätzen, aber es den Text nicht gesetzt und es stürzt ab.
for (auto blob : blobs) {
if (blob.blnStillBeingTracked == true && blob.centerPositions.size() >= 2) {
int prevFrameIndex = (int)blob.centerPositions.size() - 2;
int currFrameIndex = (int)blob.centerPositions.size() - 1;
if (blob.centerPositions[prevFrameIndex].y > (intHorizontalLinePosition-50) && blob.centerPositions[currFrameIndex].y <= intHorizontalLinePosition) {
int distance = blob.centerPositions[currFrameIndex].y - blob.centerPositions[0].y;
int tickCount = cv::getTickCount();
int time = (tickCount - blob.firstTickCount)/cv::getTickFrequency();
int speed = distance/time;
double dblFontScale = blobs[currFrameIndex].dblCurrentDiagonalSize/10.0;
int intFontThickness = (int)std::round(dblFontScale * 1.0);
std::cout<<"Speed: "<<speed<<std::endl;
cv::putText(img, std::to_string(speed), blobs[currFrameIndex].centerPositions.back(), CV_FONT_HERSHEY_SIMPLEX, dblFontScale, SCALAR_GREEN, intFontThickness);
}
}
}
siehe [Specifiyng Geschwindigkeit von visueller Größe] (http://stackoverflow.com/a/24245776/2521214) und [Auswahlkriterien für die verschiedenen Projektionen] (http://stackoverflow.com/a/ 32795205/2521214) – Spektre