1

OpenCV 2.3.1私はとを使用しておりQt、 の問題に直面していcv::calcOpticalFlowPyrLKます。以前に検出した顔を追跡するためにoodFeaturesToTrackとを使用しています。calcOpticalFlowPyrLK

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は、ウェブカメラからキャプチャした画像を保存するバッファーから画像を取得し、cにあり、Feat パラメーターに からのポイントが含まれている場合に適切な画像GrayFrameを含みます。しかし、が実行されると、NewFeat を介してまったく同じポイントが返されます。GrayFramePrev(GrayFrame -> FrameBuffer[i], GrayFramePrev -> FrameBuffer[i-1])v::calcOpticalFlowPyrLKgoodFeaturesToTrackcalcOpticalFlowPyrLK

私が間違っていることを教えてください`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;
4

0 に答える 0