Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的opencv光流代码没有很好的结果 我通过了一些资源(如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; } intmain(intargc,char*argv[]) { int MAX_COUNT=100; 大小亚像素winSize(10,10),winSize(30,30); termcrit标准termcrit(国际热核试验堆CV|U termcrit|U EPS,30,0.01); 垫架旧; Mat gray_old; 矢量点; 矢量点新; 矢量状态; 向量机; 视频捕获捕获(“C:\\Users\\Usre\\Desktop\\free\\1.mp4”); 捕获设置(CV、CAP、PROP、POS、毫秒,1000); 如果(!capture.isOpened()) {coutframenew;waitKey(10); CVT颜色(新框,灰色,颜色为灰色); calcOpticalFlowPyrLK(灰色、灰色、点、点新、状态、错误、winSize、3、termcrit、0,0.001); 尺寸i,k; 对于(i=k=0;i_C++_Opencv_Image Processing_Opticalflow - Fatal编程技术网

我的opencv光流代码没有很好的结果 我通过了一些资源(如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; } intmain(intargc,char*argv[]) { int MAX_COUNT=100; 大小亚像素winSize(10,10),winSize(30,30); termcrit标准termcrit(国际热核试验堆CV|U termcrit|U EPS,30,0.01); 垫架旧; Mat gray_old; 矢量点; 矢量点新; 矢量状态; 向量机; 视频捕获捕获(“C:\\Users\\Usre\\Desktop\\free\\1.mp4”); 捕获设置(CV、CAP、PROP、POS、毫秒,1000); 如果(!capture.isOpened()) {coutframenew;waitKey(10); CVT颜色(新框,灰色,颜色为灰色); calcOpticalFlowPyrLK(灰色、灰色、点、点新、状态、错误、winSize、3、termcrit、0,0.001); 尺寸i,k; 对于(i=k=0;i

我的opencv光流代码没有很好的结果 我通过了一些资源(如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; } intmain(intargc,char*argv[]) { int MAX_COUNT=100; 大小亚像素winSize(10,10),winSize(30,30); termcrit标准termcrit(国际热核试验堆CV|U termcrit|U EPS,30,0.01); 垫架旧; Mat gray_old; 矢量点; 矢量点新; 矢量状态; 向量机; 视频捕获捕获(“C:\\Users\\Usre\\Desktop\\free\\1.mp4”); 捕获设置(CV、CAP、PROP、POS、毫秒,1000); 如果(!capture.isOpened()) {coutframenew;waitKey(10); CVT颜色(新框,灰色,颜色为灰色); calcOpticalFlowPyrLK(灰色、灰色、点、点新、状态、错误、winSize、3、termcrit、0,0.001); 尺寸i,k; 对于(i=k=0;i,c++,opencv,image-processing,opticalflow,C++,Opencv,Image Processing,Opticalflow,光流法给出了它应该给出的结果:两幅图像之间的运动矢量。你可以将它组合成多帧轨迹,但你必须自己做 “有些时候,有些人没有任何点”,因为你的图像非常模糊,而且人们没有好的特征可以跟踪(从goodFeaturesToTrack(…)方法名称可以清楚看出)。你可以尝试在第一帧中为这些点使用恒定步长网格(如果你要将向量组合到长轨迹中)

光流法给出了它应该给出的结果:两幅图像之间的运动矢量。你可以将它组合成多帧轨迹,但你必须自己做

“有些时候,有些人没有任何点”,因为你的图像非常模糊,而且人们没有好的特征可以跟踪(从goodFeaturesToTrack(…)方法名称可以清楚看出)。你可以尝试在第一帧中为这些点使用恒定步长网格(如果你要将向量组合到长轨迹中)