Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
适用于Android的OpenCV 2.4。Java和本机代码生产率之间的奇怪差异_Android_Opencv_Android Ndk_Computer Vision - Fatal编程技术网

适用于Android的OpenCV 2.4。Java和本机代码生产率之间的奇怪差异

适用于Android的OpenCV 2.4。Java和本机代码生产率之间的奇怪差异,android,opencv,android-ndk,computer-vision,Android,Opencv,Android Ndk,Computer Vision,类似这样的东西,用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上的工作速度比这快得多

类似这样的东西,用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();

为什么以及如何修复它?还有什么更好的方法呢?

因为它是C语言。C语言比Java语言快得多,你无法修复它。如果您需要快速性能,请使用本机代码和NDK

是的,这就是为什么它很奇怪。。。因为在我的例子中,C上的代码比Java上的慢得多:我相信Java端也使用了本机库,所以您的设置一定有问题。在Java中不能更快,因为您基本上从Java调用相同的C函数。