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