【问题标题】:Image selection region stretching to rectagle图像选择区域拉伸为矩形
【发布时间】:2020-12-01 07:41:06
【问题描述】:

目前正在处理一个问题,如图所示。

在左侧表示源图像。我有选择区域,可能是 4 个点的多边形。 右侧表示图像切割的结果。可以看出,选择区域中出现的像素被拉伸到生成图像的矩形。

我想知道如何使用常规的 Qt 或 OpenCV 来获得这样的效果?

【问题讨论】:

    标签: c++ image qt opencv image-processing


    【解决方案1】:

    m7913d 描述的方法可能有用。 我尝试实现它,但不幸的是,我无法获得好的结果(可能是因为坐标指定错误)。

    我还在 OpenCV 中找到了类似的方法。 由于使用起来更简单(在我的情况下),我编写了以下代码:

    Mat src_img = imread(path.toStdString(), 1);
    imshow("source", src_img);
    
    //vectors for corners
    vector<Point2f> origin;
    vector<Point2f> dest;
    
    //output image size
    int w = src_img.cols;
    int h = src_img.rows;
    
    //specifing roi polygon
    origin.clear();
    origin.push_back(Point2f(w / 2 - 20, h / 2 - 20));  //lt
    origin.push_back(Point2f(w / 2 + 20, h / 2 - 100)); //rt
    origin.push_back(Point2f(w / 2 - 20, h / 2 + 20));  //lb
    origin.push_back(Point2f(w / 2 + 20, h / 2 + 20));  //rb
    
    //resut storage
    Mat result(w, h, CV_8UC4);
    
    //specifing area, where we want to place warped roi
    dest.clear();
    dest.push_back(Point2f(0, 0));
    dest.push_back(Point2f(w / 2, 0));
    dest.push_back(Point2f(0, h / 2));
    dest.push_back(Point2f(w / 2, h / 2));
    
    //creating transform matrix
    Mat warpMatrix = getPerspectiveTransform(origin, dest);
    
    //warping and getting result
    warpPerspective(src_img, result, warpMatrix, Size(w / 2, h / 2));
    imshow("result", result);
    
    //create a black image and merge images into one
    Mat sum(w, h, CV_8UC4, Scalar(0, 0, 0));
    src_img.copyTo(sum);
    result.copyTo(sum(Rect(40, 80, result.cols, result.rows)));
    imshow("final", sum);
    

    【讨论】:

      【解决方案2】:

      可以使用 Qt 使用以下函数执行该过程:

      创建一个变换矩阵 trans,将一个单位正方形映射到一个四边形多边形 quad。如果构造了转换,则返回 true;如果不存在此类转换,则返回 false。

      返回使用给定变换矩阵和变换模式变换的图像副本。

      将图像的子区域作为新图像返回。

      请尝试阅读文档并考虑在可行时发布您的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-28
        • 2013-01-10
        • 1970-01-01
        • 2010-10-31
        • 2012-01-05
        相关资源
        最近更新 更多