Javaで書かれたこのようなもの:
// ...preparing inputs
Imgproc.goodFeaturesToTrack(curImage, prevPts, NUM_OF_PTS, 0.001, 10);
// ...
Video.calcOpticalFlowPyrLK(prevImage, curImage, prevPts2f, nextPts2f, status, err);
// ... visualization, Core.circle
C では、これよりもはるかに高速に動作します。
Mat* now=(Mat*)addrGray;
Mat* frame=(Mat*)addrRgba;
Mat* prev=(Mat*)addrPrevGray;
goodFeaturesToTrack( *now,
vnew,
maxCorners,
qualityLevel,
minDistance,
Mat(),
blockSize,
useHarrisDetector,
k );
for( size_t i = 0; i < vnew.size(); i++ ) {
circle(*frame, Point(vnew[i].x, vnew[i].y), 10, Scalar(255,0,0,255));
}
calcOpticalFlowPyrLK(*prev, *now, vprev, vprevNow, status, track_error, winSize, maxLevel, tc, derivLambda,flags);
vprev.clear();
vector<Point2f>::iterator iter=vnew.begin();
while (iter != vnew.end()) {
vprev.push_back(*iter);
++iter;
}
vnew.clear();
vprevNow.clear();
なぜ、どうすれば修正できますか? または、それを行うより良い方法は何ですか?