使用opencv的光流
Optical flow using opencv
我正在使用OpenCV的Pyramid Lukas Kanade函数来估计光流。 我打电话给cvGoodFeaturesToTrack
,然后cvCalcOpticalFlowPyrLK
.这是我的代码:
while(1)
{
...
cvGoodFeaturesToTrack(frameAth,eig_image,tmp_image,cornersA,&corner_count,0.01,5,NULL,3,0.4);
std::cout<<"CORNER COUNT AFTER GOOD FEATURES2TRACK CALL = "<<corner_count<<std::endl;
cvCalcOpticalFlowPyrLK(frameAth,frameBth,pyrA,pyrB,cornersA,cornersB,corner_count,cvSize(win_size,win_size),5,features_found,features_errors,cvTermCriteria( CV_TERMCRIT_ITER| CV_TERMCRIT_EPS,20,0.3 ),CV_LKFLOW_PYR_A_READY|CV_LKFLOW_PYR_B_READY);
cvCopy(frameBth,frameAth,0);
...
}
frameAth
是上一个灰帧,frameBth
是网络摄像头的当前灰帧。但是当我输出每帧中要跟踪的良好特征的数量时,该数字在总和时间后减少并不断减少。但是,如果我终止程序并再次执行代码(在不干扰网络摄像头视野的情况下),则更多点将显示为跟踪的良好功能......对于相同的视野和相同的场景,该功能怎么能给出如此多的点数差异......而且差异很大..例如。执行 4 分钟后要跟踪的良好特征的点数是 20 或 50 个......但是当同一个程序终止并再次执行时,初始数字为 500 到 700,但再次缓慢减少。在过去的4个月里,我一直在使用OpenCV,所以我是OpenCV的新手。请指导我或告诉我在哪里可以找到解决方案...提前感谢很多..
您必须
调用cvGoodFeaturesToTrack
一次(在开始时,循环之前)来检测要跟踪的良好特征,然后使用cvCalcOpticalFlowPyrLK
跟踪这些特征。看看默认的opencv示例:OpenCV/samples/cpp/lkdemo.cpp
。
您正在调用cvGoodFeatureToTrack
并通过引用传递corner_count
。如果找到的要素较少,则其值会减小。在 while 循环的每次迭代中调用 cvGoodFeaturesToTrack
之前,必须将 corner_count
的值重置为其初始值。
相关文章:
- 如何使用像Farneback这样的密集光流方法跟踪稀疏特征?
- 径向过度曝光修复了容光的OpenCV
- 使用光流面对地标和稳定
- 在光流路的场周围创建边界框
- 如何分离光流中的匹配点
- 运行光流跟踪时,在每个帧中的点之间绘制一条线
- 查找每个像素 OpenCV 的光流
- OpenCV 中的光流颜色图
- 光流opencv中的错误
- 基于光流的图像分割
- 使用opencv的光流
- 基于OpenCV图像的光流场
- 我的 opencv 光流代码没有好的结果
- 如何将光流矢量仅应用于检测到的圆
- 使用光流的OpenCV跟踪
- OpenCV时间接触光流
- 用opencv计算光流
- Opencv光流跟踪:停止状态
- opencv中的光流类(CalcOpticalFlowPyrLK)参数
- OpenCV-Brox光流-OpenCV_core244d中出现异常!cv::GlBuffer::unbind