【发布时间】:2015-09-24 07:39:06
【问题描述】:
我正在尝试使用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]
坐标是黑盒子的:
你可以看到它因为负坐标而异常扭曲:
我一直在花费数小时试图追踪问题。写入方向的任何帮助/指针都将非常有帮助。 谢谢
如何拼接左图? 如果我将三个图像拼接在一起,最好的方法是什么?所以我在尝试左边和中间,下面是我的结果但是很弱:
【问题讨论】:
-
那张图片有什么问题?变换矩阵没问题。我看到的唯一问题是,相机移动并没有给你完美的图像之间的单应性关系。如果您尝试将 3D 场景修补到 2D 平面,您显然会得到一些失真......
标签: opencv homography image-stitching opencv-stitching