如何分离光流中的匹配点?
how to separating the matching points in optical flow?
我正在使用 calcOpticalFlowPyrLK()
函数来跟踪特征点。我想使用 calcOpticalFlowPyrLK()
产生的状态向量将仅匹配的点与结果分开。
opencv page 的文档说,
output status vector (of unsigned chars); each element of the vector
is set to 1 if the flow for the corresponding features has been found,
otherwise, it is set to 0.
但是在实现之前打印状态向量的时候,我发现状态向量的尺寸更大,即使数组超过了跟踪的特征点的尺寸,1和0也散落了。
如果我的跟踪点矢量大小为 65,状态矢量大小为 100,即使在状态 [64] 之后也有 1 和 0。
如果有人能帮助我得到正确的分数,我会得到帮助。
谢谢。
在我的实现中,我在 calcOpticalFlowPyrLK() 之前清除了 nextPts 和 status 向量。 prevPts、nextPts 和 status 的大小完全相同。如果 status 中的数据为 0,则输出流无效。
vector<cv::Point2f> points_prev;
/* points_prev.push_back(some data) */
vector<cv::Point2f> points_next;
vector<uchar> status;
calcOpticalFlowPyrLK(img_prev, img_next, points_prev, points_next, status, err, winSize, 3, termcrit, 0, 0.001);
for (size_t i = 0; i < status.size(); i++)
{
if(status.at(i) == 0)
/*points_prev[i] is not valid*/
}
状态向量应与特征向量大小相同。
如果您发现尺寸不匹配 - 请分享您正在使用的代码。
这里是我们如何使用它来过滤掉 "bad" 特征:
calcOpticalFlowPyrLK(gray_1, gray_2, features_1, features_2, status, err,
wins_size, max_level, term_crit);
// filter points with bad status
size_t i, k;
for( i = k = 0; i < features_2.size(); i++ ){
if (!status[i]) continue;
features_1[k] = features_1[i];
features_2[k] = features_2[i];
err[k] = err[i];
k++;
}
features_1.resize(k);
features_2.resize(k);
err.resize(k);
我正在使用 calcOpticalFlowPyrLK()
函数来跟踪特征点。我想使用 calcOpticalFlowPyrLK()
产生的状态向量将仅匹配的点与结果分开。
opencv page 的文档说,
output status vector (of unsigned chars); each element of the vector is set to 1 if the flow for the corresponding features has been found, otherwise, it is set to 0.
但是在实现之前打印状态向量的时候,我发现状态向量的尺寸更大,即使数组超过了跟踪的特征点的尺寸,1和0也散落了。
如果我的跟踪点矢量大小为 65,状态矢量大小为 100,即使在状态 [64] 之后也有 1 和 0。
如果有人能帮助我得到正确的分数,我会得到帮助。
谢谢。
在我的实现中,我在 calcOpticalFlowPyrLK() 之前清除了 nextPts 和 status 向量。 prevPts、nextPts 和 status 的大小完全相同。如果 status 中的数据为 0,则输出流无效。
vector<cv::Point2f> points_prev;
/* points_prev.push_back(some data) */
vector<cv::Point2f> points_next;
vector<uchar> status;
calcOpticalFlowPyrLK(img_prev, img_next, points_prev, points_next, status, err, winSize, 3, termcrit, 0, 0.001);
for (size_t i = 0; i < status.size(); i++)
{
if(status.at(i) == 0)
/*points_prev[i] is not valid*/
}
状态向量应与特征向量大小相同。 如果您发现尺寸不匹配 - 请分享您正在使用的代码。
这里是我们如何使用它来过滤掉 "bad" 特征:
calcOpticalFlowPyrLK(gray_1, gray_2, features_1, features_2, status, err,
wins_size, max_level, term_crit);
// filter points with bad status
size_t i, k;
for( i = k = 0; i < features_2.size(); i++ ){
if (!status[i]) continue;
features_1[k] = features_1[i];
features_2[k] = features_2[i];
err[k] = err[i];
k++;
}
features_1.resize(k);
features_2.resize(k);
err.resize(k);