我正在使用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
从缓冲区获取图像,我存储从网络摄像头捕获的图像,GrayFrame
并在它们位于 c 时GrayFramePrev
包含正确的图像,并且 Feat 参数包含来自. 但是在执行时,它会通过 NewFeat 返回完全相同的点。(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;