yarooooo 0 Жалоба Опубликовано April 22, 2012 При вызове из Java комбинация goodFeaturesToTrack+calcOpticalFlowPyrLK работает намного более быстрее, чем если ее же вызывать в нативе, хотя ,по идее, должно быть наоборот. Вот нативный код: bool first = true; //arguments for goodFeatures int maxCorners = 23; double qualityLevel = 0.1; double minDistance = 10; int blockSize = 2; bool useHarrisDetector = false; double k = 0.04; //arguments for lucas-kanade cpp vector<uchar> status; vector<float> track_error; Size winSize(5, 5); int maxLevel = 2; TermCriteria tc(TermCriteria::COUNT + TermCriteria::EPS, 5, 0.1); double derivLambda = 0; int flags = 0; vector<Point2f> vprev; vector<Point2f> vnew; vector<Point2f> vprevNow; extern "C" { JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial4_Sample4View_FindFeatures(JNIEnv* env, jobject thiz, jlong addrGray, jlong addrRgba, jlong addrPrevGray) { 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(); } } Подскажите, пожалуйста, где ошибка или что можно оптимизировать.jni_part.cpp Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 23, 2012 Можно попробовать облегчить ему задачку установив флаг, позволяющий использовать результат предыдущей итерации для последующей итерации, и углы каждый раз искать, как мне кажется, это перебор. flags – The operation flags: OPTFLOW_USE_INITIAL_FLOW use initial estimations stored in nextPts. If the flag is not set, then initially NextPts <- PrevPts. [/code] Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах