OpenCV 2.3.1 Qt cv :: calcOpticalFlowPyrLK返回相同的点

时间:2013-03-07 09:36:22

标签: qt opencv

我正在使用OpenCV 2.3.1Qt,我遇到cv::calcOpticalFlowPyrLK的问题。我正在使用oodFeaturesToTrackcalcOpticalFlowPyrLK来跟踪我之前检测到的脸部。

std::vector<cv::Point2f> Feat;
GrayFrame=FrameBuffer->GetFrame();

cv::goodFeaturesToTrack(GrayFrame,
                        Feat,
                        maxcorners,
                        qualitylevel,
                        mindistance);

while(1){
    std::vector<cv::Point2f> NewFeat;
    std::vector<uchar> status;
    std::vector<float> err;
    GrayFramePrev=GrayFrame.clone();
    GrayFrame=FrameBuffer->GetFrame();

    cv::calcOpticalFlowPyrLK(GrayFramePrev,
                             GrayFrame,
                             Feat,
                             NewFeat, 
                             status,
                             err);

    Feat=NewFeat;
}//while(1)

GrayFrame从缓冲区中获取图片,其中我存储从网络摄像头捕获的图像GrayFrameGrayFramePrev在c (GrayFrame -> FrameBuffer[i], GrayFramePrev -> FrameBuffer[i-1])时包含正确的图像v::calcOpticalFlowPyrLK {1}}和Feat参数包含goodFeaturesToTrack的点数。但是当执行calcOpticalFlowPyrLK时,它会通过NewFeat返回完全相同的点。

请告诉我`calcOpticalFlowPyrLK

我做错了什么

解决方案(对我来说)

我使用了以下参数并且它有效(我可能混淆了Feat和NewFeat,所以这就是问题所在。)

cv::calcOpticalFlowPyrLK(GreyFramePrev,
                         GreyFrame,
                         Feat,
                         NewFeat,
                         status,
                         err,
                         *WinSize,
                         maxLevel,
                         *TermCrit,
                         derivLamda,
                         LKflags,
                         minEigThreshold);

参数值

WinSize= new cv::Size(31,31);
maxLevel=3;
TermCrit= new cv::TermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03);
derivLamda=0;
LKflags=0;    
minEigThreshold=0.001;

0 个答案:

没有答案