Jump to content
Compvision.ru
Sign in to follow this  
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

Share this post


Link to post
Share on other sites

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


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]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×