Перейти к содержимому
Compvision.ru
yarooooo

Android+OpenCV, calcOpticalFlowPyrLK

Recommended Posts

При вызове из 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно попробовать облегчить ему задачку установив флаг, позволяющий использовать результат предыдущей итерации для последующей итерации, и углы каждый раз искать, как мне кажется, это перебор.


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]

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×