opencv-第六章-图像变换
重映射
在幕后,许多变换都有一个共同点。具体来说,它们会把一幅图像中一个位置的像素重映射到另一个位置。在这种情况下,就始终需要一些平滑的映射(我们希望实现的),但并不是总能做到像素一一对应。
cvRemap
对图像进行普通几何变换
void cvRemap( const CvArr* src, CvArr* dst,
const CvArr* mapx, const CvArr* mapy,
int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,
CvScalar fillval=cvScalarAll(0) );
src
输入图像.
dst
输出图像.
mapx
x坐标的映射 (32fC1 image).
mapy
y坐标的映射 (32fC1 image).
flags
插值方法和以下开关选项的组合:
CV_WARP_FILL_OUTLIERS - 填充边界外的像素. 如果输出图像的部分象素落在变换后的边界外,那么它们的值设定为 fillval。
fillval
用来填充边界外面的值.
函数 cvRemap 利用下面指定的矩阵变换输入图像:
dst(x,y)<-src(mapx(x,y),mapy(x,y))
与其它几何变换类似,可以使用一些插值方法(由用户指定,同cvResize)来计算非整数坐标的像素值。
cvWarpAffine附加标志位的值
flags:
CV_INTER_NN 最近邻
CV_INTER_LINEAR 双线性(默认)
CV_INTER_AREA 像素区域重新采样
CV_INTER_CUBIC 双三次插值
拉伸、收缩、扭曲和旋转
这些拉伸、扭曲、旋转图像的函数叫做几何转换函数。对于平面区域。有两种方式的几何转换:一种是基于2x3矩阵进行的变换,也叫仿射变换;另一种是基于3x3矩阵的变换,又叫做透视变换或者单应性映射。可以把后一种变换当做一个三维平面被一个特定观察者感知的计算方法,而该观察者也许不是垂直观测该平面。
仿射变换可以将矩形转换成平行四边形。它可以将矩形的边压扁但必须保持边是平行的,也可以将矩形旋转或者按比例变化。透视变换提供了更大的灵活性