Вы смотрели на образец дескриптора_extractor_matcher.cpp OpenCV? В этом примере RANSAC используется для определения гомографии между двумя входными изображениями. Я полагаю, когда вы говорите обернуть, вы на самом деле имеете в виду деформацию? Если вы хотите деформировать изображение с помощью матрицы гомографии, которую вы обнаружили, обратите внимание на функцию warpPerspective . Наконец, здесь - это несколько хороших руководств, использующих различные детекторы функций в OpenCV.
РЕДАКТИРОВАТЬ:
Возможно, у вас нет функций SURF, но у вас наверняка есть особенности с разными классами. Сопоставление на основе признаков обычно делится на две фазы: обнаружение признаков (которое вы уже сделали) и извлечение, которое необходимо для сопоставления. Таким образом, вы можете попытаться преобразовать свои функции в KeyPoint , а затем выполнить извлечение и сопоставление функций. Вот небольшой фрагмент кода о том, как вы можете это сделать:
typedef int RED_TYPE = 1;
typedef int GREEN_TYPE = 2;
typedef int BLUE_TYPE = 3;
typedef int PURPLE_TYPE = 4;
struct BenFeature
{
Point2f pt;
int classId;
};
vector<BenFeature> benFeatures;
// Detect the features as you normally would in addition setting the class ID
vector<KeyPoint> keypoints;
for(int i = 0; i < benFeatures.size(); i++)
{
BenFeature bf = benFeatures[i];
KeyPoint kp(bf.pt,
10.0, // feature neighborhood diameter (you'll probaby need to tune it)
-1.0, // (angle) -1 == not applicable
500.0, // feature response strength (set to the same unless you have a metric describing strength)
1, // octave level, (ditto as above)
bf.classId // RED, GREEN, BLUE, or PURPLE.
);
keypoints.push_back(kp);
}
// now proceed with extraction and matching...
Возможно, вам придется настроить силу отклика так, чтобы она не получала пороговое значение на этапе извлечения. Но, надеюсь, это иллюстрирует то, что вы можете попытаться сделать.