1

我正在使用 OpenCV 来实现一个提供 2D 视口的应用程序,该视口可以在更大的图像上移动和调整大小。

为此,我需要能够获取源图像的​​一个子区域并以亚像素精度将其渲染到输出。实际上,该操作是裁剪和调整大小的组合。

我可以使用getRectSubPix以亚像素精度裁剪图像,然后将其调整为输出视口的分辨率。然而,这有一个问题。由于 getRectSubPix 返回与源图像分辨率相同的图像,因此它将视口限制为在源图像分辨率方面具有整数宽度和高度的大小。这在应用程序中是不可接受的,因为我们需要能够平滑缩放。

我可以先将图像调整为与输出视口相同的分辨率,然后再裁剪它。但是,在处理大图像上的小视口时,这将需要大量不必要的工作和空间。

我需要的是一个同时调整图像大小和裁剪图像的组合过程。有谁知道使用 Open CV 最简单的方法?

4

1 回答 1

1

cv::remap是我正在寻找的功能。它允许您从源图像中的指定位置对每个输出像素进行采样,这些位置是您通过双通道矩阵提供的。

它比专用功能更繁琐,但可以解决问题(至少用于放大......remap不能CV_INTER_AREA用于需要一些额外工作才能在这些情况下获得良好结果的减少)。

于 2013-09-05T15:30:46.737 回答