surfでARToolkit - なんでもマーカ

そういえばOpenCVのsruf(find_obj.c)の探索結果をARToolkitに渡すテストをしばらく前に作ったので、ちょっとだけ覚え書き。
ARToolkitでは正方形の領域でないとマーカとして扱ってくれないので、surfで探索もとの画像も正方形で用意する。
find_obj.cのサンプルで、すでに正方形の4つの頂点が取得できているので、それから計算できる値を単純にARMarkerInfoに入れてしまえば、それでおしまい。
もちろんARToolkitのマーカ探索関数は使わない。

マーカに情報セットする関数は、次のような感じ。

void setMarkerInfo( ARMarkerInfo *marker ,CvPoint *corner){
	int area = 0;

	marker->id = 0;
	marker->dir = 0;
	marker->cf = 1.0;
	marker->pos[0] = 0;
	marker->pos[1] = 0;

	int peak=0;
	int nextpeak =0;
	for(peak = 0; peak < 4 ; peak++){
		nextpeak = peak+1;
		if(nextpeak >= 4){
			nextpeak = 0;
		}
		//
		area += (corner[peak].x * corner[nextpeak].y - corner[nextpeak].x * corner[peak].y);
		//
		marker->vertex[peak][0] = corner[peak].x;
		marker->vertex[peak][1] = corner[peak].y;

		marker->line[peak][0] = corner[nextpeak].y - corner[peak].y;
		marker->line[peak][1] = corner[peak].x - corner[nextpeak].x;
		marker->line[peak][2] = corner[nextpeak].x * corner[peak].y - corner[peak].x * corner[nextpeak].y;

	}
	marker->area = area/2;
	return;

}

D