如何处理透视变换生成的负坐标?

问题描述

我有两张图片。我找到了他们之间的单应性。当我使用单应矩阵将一张图像带到单应平面时,有一些点的坐标为负。

这是我写的代码->

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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...