如何解决如何处理透视变换生成的负坐标?
我有两张图片。我找到了他们之间的单应性。当我使用单应矩阵将一张图像带到单应平面时,有一些点的坐标为负。
这是我写的代码->
Docs.getBody().replaceText("{{name}}",name)
projectCorners 向量中的某些点具有负 y 值,因此我尝试找到左上角,以便我可以在我的翻译矩阵中使用它。
接下来我在 y 方向上平移原始图像,因为 y 坐标为负。
Mat H; // this is calculated by a function.
Mat image1,image2;
vector<Point2f> imageCorners(4);
imageCorners[0] = Point(0,0);
imageCorners[1] = Point(image1.cols - 1,0);
imageCorners[2] = Point(image1.cols - 1,image1.rows - 1);
imageCorners[3] = Point(0,image1.rows - 1);
vector<Point2f> projectedCorners(4);
perspectiveTransform(imageCorners,projectedCorners,Hs);
Point imageTl(projectedCorners[0]),imageBr = imageTl;
for (int i = 0; i < projectedCorners.size(); ++i) {
const Point2d &pt = projectedCorners[i];
if (imageTl.x > pt.x)imageTl.x = floor(pt.x);
if (imageTl.y > pt.y)imageTl.y = floor(pt.y);
if (imageBr.x < pt.x)imageBr.x = ceil(pt.x);
if (imageBr.y < pt.y)imageBr.y = ceil(pt.y);
}
Rect imageROI = Rect(imageTl,imageBr);
Point2f imageVertShift = -imageROI.tl();
在此之后,我像这样使用 warpPerspective 函数->
double val[] = { 1,1,imageVertShift.y };
Mat translate = Mat(2,3,CV_64FC1,val);
warpAffine(image1,image1,translate,Size(image.cols,image.rows + imageVertShift.y));
此后没有数据丢失,但我希望图像从 0 开始作为 y 坐标,但 y 的起点不止于此。为什么会这样?因为我已经根据projectedCorners中发现的最高负数翻译了原始图像。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。