我的 opencv 光流代码没有好的结果
No good results from my opencv optical flow code
嗨,我浏览了几个资源(如opencv网站,opencv示例代码等)并编写了C ++代码来跟踪来自静态相机的移动物体(这里是人类)的路径。这是我的代码
int main(int argc, char *argv[])
{
int MAX_COUNT=100;
Size SubPixelWinSize(10,10),winSize(30,30);
TermCriteria termcrit(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,30,0.01);
Mat frame_old;
Mat gray_old;
vector<Point2f>points;
vector<Point2f>pointsnew;
vector<uchar>status;
vector<float>err;
VideoCapture capture("C:\Users\Usre\Desktop\free\1.mp4");
capture.set(CV_CAP_PROP_POS_MSEC,1000);
if(!capture.isOpened())
{cout<<"error opening video"<<endl;return -1;}
else
{
capture>>frame_old;
cvtColor(frame_old,gray_old,COLOR_BGR2GRAY);
goodFeaturesToTrack(gray_old,points,MAX_COUNT,0.001,1,Mat(),3,0,0.04);
cornerSubPix(gray_old,points,SubPixelWinSize,Size(-1,-1),termcrit);
for(;;)
{
Mat framenew;
Mat gray;
capture>>framenew;waitKey(10);
cvtColor(framenew,gray,COLOR_BGR2GRAY);
calcOpticalFlowPyrLK(gray_old,gray,points,pointsnew,status,err,winSize,3,termcrit,0,0.001);
size_t i,k;
for(i=k=0;i<pointsnew.size();i++)
{
if(!status[i])
continue;
pointsnew[k++]=pointsnew[i];
Point p1,p2;
p1.x= (int)points[i].x;
p1.y= (int)points[i].y;
p2.x= (int)pointsnew[i].x;
p2.y= (int)pointsnew[i].y;
line(framenew,p1,p2,Scalar(0,255,0),3,8,0);
}
pointsnew.resize(k);
swap(points,pointsnew);
gray.copyTo(gray_old);
imshow("new",framenew);
waitKey(10);
}
}
return 0;
}
所以在运行这个时,我只得到移动的点,移动的人沿路径没有线。有些时候对于某些人来说没有任何点。这些点在背景中(我的意思是在静态地面上。它没有移动)。我尝试通过更改参数但没有运气。
我使用的视频是 https://www.youtube.com/watch?v=H7BrVzdOzc4
问题1.为什么我会得到这些糟糕的结果?为什么跟踪线没有绘制(只有点)?2.需要做哪些更改才能获得正确的结果。?
我将Qt creator与Visual Studio 2010,opencv 2.4.8,Windows 7环境一起使用。
认为我的解释很清楚。
任何帮助将不胜感激..谢谢!!!!
光流方法准确地给出了它应该给出的东西:两个图像之间的运动矢量。您可以将其组合到多帧轨迹中,但您必须自己完成。
"有些时候对于某些人来说没有任何点",因为您的图像非常模糊,并且人们没有好的功能可以跟踪(从goodFeaturesToTrack(...)方法名称中可以清楚地看出)。您可以尝试在第一帧中对此点进行恒定步长网格(如果要将矢量组合到长轨迹中)。
相关文章:
- Tensorflow对象检测在Python和C++(OpenCV)之间有不同的结果
- opencv c++ kmeans 和 matlab kmeans 的不同结果
- 在OpenCV中设置像素值(奇怪的结果)
- OpenCV 混合模式实现:为什么看似等效的操作会产生不同的结果?
- 自制bgr2hsv和opencv bgr2hsv之间的结果不同
- 使用 OpenCV 原始指针和 lambda 作为直方图的不同结果
- imshow() 在 C++ 年使用 OpenCV 3.2 产生了奇怪的结果
- OpenCV在Windows和Linux上有不同的结果
- 调整OpenCV Mat向量向量的大小时出乎意料的结果
- OPENCV解码灰色代码模式相机校准错误.如何格式化固有和外在结果
- 意外的摄像头校准结果与JPEG图像和EXIF方向上的OPENCV结果
- 划分 OpenCV 垫会产生意想不到的结果
- OpenCV SVM::p redict() 结果集总是给出相同的最后一个值
- 当我使用 opencv 函数 cvNorm(image,NULL,CV_L2)时,它会返回异常结果,为什么
- OpenCV级联分类器检测输入Mat边界外的MultiScale结果Rect
- 无法根据opencv旋转矩形教程获得相同的图像结果
- OpenCV 结果在调试/发布和其他机器之间更改
- 如何在opencv中从svmPredict()中获取分类结果
- 在opencv中findChessboardCorners()的结果不一致
- 将示例图像与图像数据库进行比较时出现意外结果 - Opencv c++