运行 光流跟踪时在每一帧的点之间画一条线
Drawing a line between points in each frame when running optical flow tracking
我是 运行 link here 的稀疏光流演示,我只是想在视频中所有帧中跟踪的单个点之间画一条线。
在 for 循环中,
int LastX = 0;
int LastY = 0;
int px, py;
else if( !points[0].empty() )
{
vector<uchar> status;
vector<float> err;
if(prevGray.empty())
gray.copyTo(prevGray);
calcOpticalFlowPyrLK(prevGray, gray, points[0], points[1], status, err, winSize,
3, termcrit, 0, 0.001);
size_t i, k;
for( i = k = 0; i < points[1].size(); i++ )
{
if( addRemovePt )
{
if( norm(point - points[1][i]) <= 5 )
{
addRemovePt = false;
continue;
}
}
if( !status[i] )
continue;
points[1][k++] = points[1][i];
px = points[1][i].x;
py = points [1][i].y;
if (LastX > 0)
{
line(image, Point(px, py), Point(LastX, LastY), Scalar(255, 0, 0), 5);
}
LastX = px;
LastY = py;
circle( image, points[1][i], 3, Scalar(0,255,0), -1, 8);
}
points[1].resize(k);
}
但是,线条只出现在当前帧中,线条的位置不会保存在之前的帧中。有人可以告诉我我做错了什么吗?
尝试使用vector<vector<Point>>
存储从第一帧到最后一帧的匹配点对。
流量点的匹配过程与汽车跟踪类似。
你可以参考这篇 .
我是 运行 link here 的稀疏光流演示,我只是想在视频中所有帧中跟踪的单个点之间画一条线。
在 for 循环中,
int LastX = 0;
int LastY = 0;
int px, py;
else if( !points[0].empty() )
{
vector<uchar> status;
vector<float> err;
if(prevGray.empty())
gray.copyTo(prevGray);
calcOpticalFlowPyrLK(prevGray, gray, points[0], points[1], status, err, winSize,
3, termcrit, 0, 0.001);
size_t i, k;
for( i = k = 0; i < points[1].size(); i++ )
{
if( addRemovePt )
{
if( norm(point - points[1][i]) <= 5 )
{
addRemovePt = false;
continue;
}
}
if( !status[i] )
continue;
points[1][k++] = points[1][i];
px = points[1][i].x;
py = points [1][i].y;
if (LastX > 0)
{
line(image, Point(px, py), Point(LastX, LastY), Scalar(255, 0, 0), 5);
}
LastX = px;
LastY = py;
circle( image, points[1][i], 3, Scalar(0,255,0), -1, 8);
}
points[1].resize(k);
}
但是,线条只出现在当前帧中,线条的位置不会保存在之前的帧中。有人可以告诉我我做错了什么吗?
尝试使用vector<vector<Point>>
存储从第一帧到最后一帧的匹配点对。
流量点的匹配过程与汽车跟踪类似。
你可以参考这篇