图像选择区域会延伸到

问题描述

当前正在处理一个问题,该问题在所代表的图像上进行了说明。

problem description

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

我想知道如何通过使用常规Qt或OpenCV获得这种效果?

解决方法

可以使用Qt使用以下功能来执行该过程:

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

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

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

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

,

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

我还在OpenCV中发现了类似的方法。 而且由于使用更简单的api(以我为例),我编写了以下代码:

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,CV_8UC4,Scalar(0,0));
src_img.copyTo(sum);
result.copyTo(sum(Rect(40,80,result.cols,result.rows)));
imshow("final",sum);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...