图像的坐标变换是通过原图像与目标图像之间建立一种变换关系。
图像的坐标映射也是图像的一种坐标变换。主要是对图像像素的变换。这种变换的关系可以下面公式表示:
dst(x,y) = src(mapx(x,y),mapy(x,y))
图像的坐标映射也分为正映射和反映射。
正映射就是从原图像变换到目标图像。
反映射是将目标图像变换到原始图像。
在opencv 中实现坐标变换的函数是remap,函数原型如下:
1 | void cv::remap(InputArray src, |
参数:
src : 原始图像;
dst : 目标图像,大小和map1的大小相同,数据类型和src的数据类型一样;
map1:表示(x,y)坐标点或者是x坐标,类型为CV_16SC2,CV_32FC1或者CV_32FC2;
map2: 表示y坐标,类型是CV_16UC1, CV_32FC1,当map1是(x,y)坐标时,map2可以为空;
Interpolation:表示插值算法,枚举类型主要。暂不支持INTER_AREA 插值算法。插值算法有一下几种:
类型 | 说明 |
---|---|
INTER_NEAREST | 最近邻插值 |
INTER_LINEAR | 双线性插值 |
INTER_CUBIC | 双三次插值 |
INTER_AREA | 利用像素面积关系重采样。这可能是图像抽取的首选方法,因为它可以得到无云纹的结果。但当图像被放大时,它类似于最近邻法。 |
INTER_LANCZOS4 | 8x8邻域上的Lanczos插值 |
INTER_LINEAR_EXACT | 位精确双线性插值 |
INTER_NEAREST_EXACT | 位最近邻插值算法。在PIL,scikit-image和Matlab中效果和最近邻插值算法一样 |
INTER_MAX | 插值算法掩码 |
WARP_FILL_OUTLIERS | 标志,填充目标图像。如果目标图像的一部分是异常值,那么他们被设置为0 |
WARP_INVERSE_MAP | 标志,逆变换 |
borderMode: 边界插值类型;
borderValue: 表示边界插值数据。
代码示例如下:
1 |
|
结果展示: