我正在使用OpenCV来实现一个提供2D视口的应用程序,该视口可以在更大的图像上移动和调整大小。
为此,我需要能够拍摄源图像的子区域,并以亚像素精度将其渲染到输出。实际上,该操作是组合裁剪并调整大小。
我可以使用getRectSubPix以亚像素精度裁剪图像,然后将其调整为输出视口的分辨率。但是,这有一个问题。由于getRectSubPix以与源图像相同的分辨率返回图像,因此它将视口约束为具有源图像分辨率的整数宽度和高度的大小。这在应用程序中是不可接受的,因为我们需要能够平滑地缩放。
我可以先将图像调整为与输出视口相同的分辨率,然后裁剪它。但是,当处理大型图像上的微小视口时,这将需要大量不必要的工作和空间。
我需要的是一个组合过程,既可以同时调整图像大小并裁剪图像。有没有人知道用Open CV做这个最简单的方法?
答案 0 :(得分:1)
cv::remap是我正在寻找的功能。它允许您从源图像中的指定位置(通过双通道矩阵提供的位置)对每个输出像素进行采样。
它比专用函数更加繁琐,但是诀窍(至少放大...... remap
不能使用CV_INTER_AREA
进行缩减,需要一些额外的工作来获得良好的效果例)。