Я пытаюсь использовать ARtoolkit для обнаружения маркеров в ряде видео. Для каждого источника видео я инициализирую arHandle, используя следующий код:
ARParam cparam;
AR_PIXEL_FORMAT pixFormat = AR_PIXEL_FORMAT_RGB;
cparam.xsize = 1000;
cparam.ysize = 800;
cparam.dist_function_version = 1
for(int i = 0; i < 4; ++i){
cparam.dist_factor[i] = calib.distParams[i];
}
for(int i = 0; i < 3; ++i){
for(int j = 0; j < 3; ++j){
cparam.mat[i][j] = calib.K(i,j);
}
}
for(int i = 0; i < 3; i ++){
cparam.mat[i][3] = 0.0f;
}
arParamDisp( &cparam );
if ((gCparamLT = arParamLTCreate(&cparam, AR_PARAM_LT_DEFAULT_OFFSET)) == NULL) {
ARLOGe("Error: arParamLTCreate.\n");
exit(-1);
}
if( (arHandle=arCreateHandle(gCparamLT)) == NULL ) {
ARLOGe("Error: arCreateHandle.\n");
exit(0);
}
if( arSetPixelFormat(arHandle, pixFormat) < 0 ) {
ARLOGe("Error: arSetPixelFormat.\n");
exit(0);
}
if( (arPattHandle=arPattCreateHandle()) == NULL ) {
ARLOGe("Error: arPattCreateHandle.\n");
exit(0);
}
patt_id.push_back(arPattLoad(arPattHandle, "hiro.patt"));
arPattAttach(arHandle, arPattHandle);
где информация о калибровке (калибровка) рассчитывается для каждой камеры. Дескрипторы созданы и шаблоны загружены без ошибок.
Затем я пытаюсь определить маркер «hiro» в каждом источнике видео, используя:
arDetectMarker(arHandle, img.data);
где img — это cv :: Mat, представляющий каждый кадр видео в RGB. Тип opencv — CV_8UC3.
Тем не менее, я всегда нахожу, что markerNum = arGetMarkerNum (arHandle) = 0, для каждой камеры.
Кто-нибудь знает, почему у меня может быть эта проблема?
Задача ещё не решена.
Других решений пока нет …