0

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();

なぜ、どうすれば修正できますか? または、それを行うより良い方法は何ですか?

4

1 に答える 1

0

それは C です。C は Java よりもはるかに高速であり、修正することはできません。高速なパフォーマンスが必要な場合は、ネイティブ コードと NDK を使用してください

于 2012-04-22T20:24:56.747 に答える