重映射就是把一个图像中一个为之的像素放置到另一个图片指定位置过程。为了完成重映射过程有必要获得一些插值作为非整数像素坐标,因为原图像与目标图像的像素坐标不是一一对应的。我们通过重映射来表达每个像素的位置(x, y):
g(x, y)=f(h(x,y))
这里g()是目标图像,f()是原图像,h(x,y)是作用于(x,y)的映射方法函数。假设有一幅图像I,满足下面条件作重映射:
h(x,y)=(I.cols - x,y)
图像会按照x轴方向发生反转,如下:
看到红色圈关于x的位置改变(x轴水平翻转)
opencv提供函数reman()实现简单的重映射。remap函数原型如下:
void cv::remap ( InputArray src,
OutputArray dst,
InputArray map1,
InputArray map2,
int interpolation,
int borderMode = BORDER_CONSTANT,
const Scalar & borderValue = Scalar()
)
参数解释
. src:输入图像
. dst:目标图像,与原图像类型相同,与map1图像尺寸大小相等
. map1: (x, y)的第一个映射或者是CV_16SC2、CV_32FC1或CV_32FC2的x值。查询convertMaps获得详细解释。
. map2: 第二个map,表示类型为CV_16UC1、CV_32FC1的y值或空值(如果map1是用(x,y)进行表示)
. interpolation: 插值方式,在此函数中不支持INTER_AREA插值方法。插值方法如下(可通过Interpolation