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; }