Я позволил пользователю выбрать 5 очков на двух изображениях, которые не имеют одинакового размера (может быть, это проблема). Как пользователь выбирает точку на любом изображении, я нажимаю этот Point2f
вектор, посвященный этому конкретному изображению.Почему findHomography возвращает плохой результат?
Таким образом, в одном случае, у меня есть следующие данные:
1. Image 2 at x: 607, and y: 286
2. Image 2 at x: 750, and y: 367
3. Image 2 at x: 527, and y: 353
4. Image 2 at x: 752, and y: 469
5. Image 2 at x: 584, and y: 482
-
1. Image 1 at x: 301, and y: 343
2. Image 1 at x: 440, and y: 328
3. Image 1 at x: 275, and y: 472
4. Image 1 at x: 478, and y: 457
5. Image 1 at x: 389, and y: 597
Однако findHomohraphy
возвращает
[0, 0, 0;
0, 0, 0;
0, 0, 0]
Это то, что моя функция делает, когда он получает провести 2 вектора с 4 точками.
Mat tranform(std::vector<cv::Point2f> src, std::vector<cv::Point2f> dst) {
transMatrix = findHomography(src, dst, CV_RANSAC);
std::cout << transMatrix << std::endl;
return transMatrix;
}
Я также попытался изменить метод аргумент findHomohraphy из 0
в CV_RANSAC
.
Я отлаживаю немного дальше, и у меня возникли проблемы с печатью вектора Point2f
. Возможно, я не назначаю его правильно
Это то, что я сейчас делаю в функции обратного вызова окна изображения.
imgOnePoints.assign(imgOneIndex, Point2f(x,y));
Я думаю, что он не может найти ничего общего. – zoran404
Возможно, я не присвоил вектор правильно – Iancovici
Общий совет с поиском гомографии; Больше очков = лучше. Особенно с Ransac, поскольку это позволяет игнорировать отклонения. Результат нулевой матрицы означает, что он не смог найти гомографию (не всегда означает, что нет ни одного из источников) – Nallath