0
我試圖在視頻序列中使用光流方法跟蹤四邊形。四邊形由用戶在開始時提供。它的工作時間很短,但隨着對象的旋轉,跟蹤開始失敗。有人可以怎樣才能改善這種跟蹤?目標感興趣的是摩托車上的號碼牌,其具有順序中的旋轉和平移運動。最初的四個點(車牌四角)由用戶選擇。 我也試過使用SHIFT描述符,但我沒有得到足夠的匹配點之間的連續幀感興趣的地區。基於光流跟蹤OpenCV中的四邊形點
std::vector<cv::Point2f> feature_prev, feature_next;
std::vector<uchar> status_vector;
std::vector<float> status_error;
cv::TermCriteria termcrit;
cv::Size subPixWinSize, winSize;
cv::Mat prevFrame;
cv::Mat currFrame;
feature_next.push_back(cv::Point2f((float)refRoi.P1().x,(float)refRoi.P1().y));
feature_next.push_back(cv::Point2f((float)refRoi.P2().x,(float)refRoi.P2().y));
feature_next.push_back(cv::Point2f((float)refRoi.P3().x,(float)refRoi.P3().y));
feature_next.push_back(cv::Point2f((float)refRoi.P4().x,(float)refRoi.P4().y));
cv::cvtColor(srcCpy, currFrame, CV_BGR2GRAY);
cv::equalizeHist(currFrame, currFrame);
// cv::Mat srcMat(srcGray.operator const IplImage *());
// dst = src;
if(!feature_prev.empty())
{
status_vector.clear();
status_error.clear();
feature_next.clear();
cv::calcOpticalFlowPyrLK(prevFrame, currFrame,feature_prev,feature_next,status_vector,status_error, winSize, 5, termcrit, 0, 0.001);
size_t i, k;
for(i = k = 0; i < feature_next.size(); i++)
{
if(!status_vector[i])
{
continue;
}
feature_next[k++] = feature_next[i];
circle(srcCpy, feature_next[i], 3, cv::Scalar(0,255,0), -1, 8);
}
feature_next.resize(k);
}
感謝您的信息,我就開始尋找到。 – praks411