【发布时间】:2012-10-24 13:03:16
【问题描述】:
我试图找出原因当我在 OpenCV 中对图像应用仿射变换时,它的结果在预览窗口中不可见,但整个窗口都是黑色的。如何找到解决此问题的方法这样无论应用什么变换,我都可以始终在窗口中查看变换后的图像(仿射变换的结果)?
更新:我认为这是因为所有的变换都是相对于坐标系的原点(图像的左上角)计算的。虽然对于旋转,我可以指定旋转的中心,并且我可以查看结果,但当我执行缩放时,我无法控制转换后的图像的去向。是否可以以某种方式移动坐标系以使图像适合窗口?
Update2:我有一张图像,其中某个位置仅包含 ROI(图像的其余部分为黑色),我需要对其应用一组仿射变换。为了让事情变得更简单并查看每个单独变换的效果,我一个一个地应用了每个变换。我注意到的是,每当我移动(平移)图像以使 ROI 的中心位于坐标系的中心(视图窗口的左上角)时,所有仿射变换都会在不移动的情况下正确执行。但是,通过在坐标系中心平移 ROI 的中心,ROI 的上半部分和左半部分仍然被切出当前视图窗口。 如果我将 ROI 的中心点移动到视图窗口中的另一个点(例如窗口中心),则类型为仿射变换: A=[a 0 0; 0 b 0](A是2x3矩阵,warpAffine函数的参数) 将图像 (ROI) 移动到视图窗口之外(如果 ROI 的中心位于左上角,则不会发生这种情况)。如何修改仿射变换以使图像不会移出其位置(与 ROI 中心位于坐标系中心时的行为相同)?
【问题讨论】:
-
如果您希望能够应用任何仿射变换,您将无法始终查看它。一个更好的主意可能是手动将您的变换应用于正方形的 4 个角,然后查看这 4 个点最终的坐标。这将告诉您图像的去向。
-
好的,但是如果我需要连续应用多个仿射变换怎么办?黑色图像的仿射变换是黑色图像。就好像信息被浪费了一样。就我而言,我需要转换后的图像进行进一步处理。如果我将仿射变换应用于正方形,我将如何计算新坐标,以便查看它们的位置?
-
是的,您始终可以以某种方式移动坐标系,以使图像适合窗口。如果您想要一个好的答案,请添加细节。一个很好的问题可能是。 “我有这个形状(显示图像或指定坐标),当我对它应用这个缩放变换时,它会移出屏幕,我希望它在不移动的情况下就地缩放,我该如何修改这个变换来实现呢?”尽可能具体。
-
感谢您的帮助,我修改了我的问题。希望现在清楚了。