我想使用opencv执行图像变形。 我已经检测到图像的4个角((ex)4000x4000),并在opencv中使用getPerspectiveTransform
获得了变换矩阵。 现在,我想在图像中心扭曲图像。 所以我用warpPerspective
。 我输入的源图像的大小是450x450,我使用我为整个图像计算的变换矩阵。图像使用opencv变形
但屏幕上没有显示任何内容。 任何帮助表示赞赏。
这里是示例代码和示例图像。
这是我从图像要翘曲区域。(src_crop在代码)
这是结果。
source[0] = Point2f(lt.x, lt.y);
source[1] = Point2f(rt.x, rt.y);
source[2] = Point2f(rb.x, rb.y);
source[3] = Point2f(lb.x, lb.y);
dst[0] = Point2f(6, 10);
dst[1] = Point2f(3899, 7);
dst[2] = Point2f(3901, 3899);
dst[3] = Point2f(9, 3902);
Mat transformMatrix ;
transformMatrix = getPerspectiveTransform(source, dst);
Mat dstFrame ;
warpPerspective(src_crop, dstFrame, transformMatrix, Size(450, 450));
感谢您的回答。我知道计算整个图像的转换矩阵(4000乘4000)。但我输入src_crop(450乘450)的图像warpPerspective作为源图像。所以我认为src_crop图像使用变换矩阵变形。是不可能的?如果我不知道src_crop图像的角点,我想为src_crop图像翘曲图像 – eonjeo
您应该使用'sourceImage'(4000x4000)而不是剪裁它。裁剪将导致您的'originalCorners'数组指向不存在的角点。在翘曲之前,我从来没有做过纠错,但这可能会导致您的输出完全黑色的事实? – Jurjen
其实我使用裁剪图像是因为减少了程序的运行时间。我使用matchTemplate函数来检测裁剪图像的中心点。所以我猜想裁剪图像变形而不是整个图像变形是变形的时间很短。 – eonjeo