我正在努力解决这个问题:
我有一个图像,我想对它应用一个扭曲透视图(我已经有了变换矩阵)但是输出只有变换区域(如下例所示)我希望能够看到而是整个图像。
EXAMPLE http://docs.opencv.org/trunk/_images/perspective.jpg
我想要转换整个原始图像,而不是像转换区域一样。
我怎样才能做到这一点?
谢谢!
答案 0 :(得分:1)
您似乎通过在输入图像中选择数独网格的角来计算透视变换,并请求它们在输出图像中的固定位置处变形。在您的示例中,您似乎要求左上角在坐标(0,0)处扭曲,右上角在(300,0),左下角在(0,300)和底部 - 在(300,300)。
这将总是导致在两个左角的左侧和两个顶角上方(即,输出图像中x <0或y <0的图像区域)裁剪图像区域。此外,如果您指定输出图像大小为300x300,则会导致右侧角落和底角下方的图像区域裁剪。
如果要保留整个图像,则需要为角点使用不同的输出坐标。例如,将TLC扭曲到(100,100),TRC到(400,100),BLC到(100,400)和BRC到(400,400),并指定输出图像大小为600x600。
您还可以按如下方式计算最佳坐标:
这样,您可以保证:
然而,这会产生黑色区域,因为输出图像不再是完美的矩形,因此输出图像中的某些像素在输入图像中不会有任何对应关系。
编辑1:如果您想用其他内容替换黑色区域,可以根据需要初始化目标矩阵,然后设置borderMode
warpPerspective
参数函数到BORDER_TRANSPARENT
。