Я пытаюсь использовать FindHomography
, чтобы найти матрицу деформации между двумя камерами, а затем сшить изображения вместе с помощью warpPerspective
. Однако изображение, которое необходимо деформировать, чрезмерно расширяется и переворачивается на другую сторону экрана. Ниже приведен упрощенный код, показывающий странное поведение:
vector<Point2f> obj, scene, objCorners, TransformedObjCorners;
scene.push_back(Point2f(324,21));
scene.push_back(Point2f(388,4));
scene.push_back(Point2f(392,110));
scene.push_back(Point2f(322,111));
obj.push_back(Point2f(21,18));
obj.push_back(Point2f(79,45));
obj.push_back(Point2f(76,128));
obj.push_back(Point2f(13,118));
objCorners.push_back(Point2f(0,0));
objCorners.push_back(Point2f(400,0));
objCorners.push_back(Point2f(400,300));
objCorners.push_back(Point2f(0,300));
cv::Mat H = findHomography(obj, scene);
perspectiveTransform(objCorners, TransformedObjCorners, H);
cout << "Transformed object corners are :" << endl;
cout << TransformedObjCorners << endl;
и мой результат:
Transformed object corners are :
[309.14066, 18.626106;
-2.5252595, 298.53754;
31.930698, 9.6980038;
319.43829, 279.87805]
Координаты черного ящика:
И вы можете увидеть, что здесь он аномально деформирован из-за отрицательных координат:
Я часами пытался отследить проблему. Любая помощь / указатели в направлении записи будут очень полезны. Спасибо
Как сшить левое изображение? если я сшиваю три изображения вместе, что будет лучшим подходом? Итак, я пробую слева и посередине, а ниже мой результат, но очень слабый: