引用,OpenCv \ samples \ c \ lkdemo.c
有人知道以下代码片段是做什么的吗?
从lkdemo.c中提取的代码
for( i = k = 0; i < count; i++ )
{
if( add_remove_pt )
{
double dx = pt.x - points[1][i].x;
double dy = pt.y - points[1][i].y;
if( dx*dx + dy*dy <= 25 )
{
add_remove_pt = 0;
continue;
}
}
if( !status[i] )
continue;
points[1][k++] = points[1][i];
cvCircle( image, cvPointFrom32f(points[1][i]), 3, CV_RGB(0,255,0), -1, 8,0);
}
count = k;
Q1。
粗线是什么? >> points [1] [k ++] = points [1] [i];
为什么选择k ++?我感到困惑,以为下一点被覆盖
当前点
Q2。
当cvCircle id随着框架循环绘制时,旧点在哪里清除而新点在哪里绘制?
我期待着您的投入。
谢谢=)
最佳答案
Q1:
如果我重构代码,也许会有所帮助:
if( status[i] ) {
points[1][k++] = points[1][i]; // <---- Q1
cvCircle( image, cvPointFrom32f(points[1][i]), 3, CV_RGB(0,255,0), -1, 8,0);
}
因此,在问题1的行中,我总是递增(它由循环递增),但k仅在status [i]为true时递增。简而言之,它通过复制状态[i]为假的值来消除数组中的任何点,然后将数组的长度(计数)设置为k(通过消除的数字)。
关于c++ - OpenCV示例程序lkdemo,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/339508/