学习opencv----放射变换

WarpAffine

void cvWarpAffine( const CvArr* src, CvArr* dst, constCvMat* map_matrix,

                                  int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,

                                  CvScalar fillval=cvScalarAll(0) );

src

输入图像.

dst

输出图像.

map_matrix

2×3 变换矩阵

flags

插值方法和以下开关选项的组合:

·       CV_WARP_FILL_OUTLIERS - 填充所有输出图像的象素。如果部分象素落在输入图像的边界外,那么它们的值设定为 fillval.

·       CV_WARP_INVERSE_MAP - 指定 map_matrix是输出图像到输入图像的反变换,因此可以直接用来做象素插值。否则, 函数从 map_matrix 得到反变换。

fillval

用来填充边界外面的值

如果没有指定 CV_WARP_INVERSE_MAP ,

否则, 


2DRotationMatrix

2DRotationMatrix
计算二维旋转的仿射变换矩阵 

CvMat* cv2DRotationMatrix( CvPoint2D32f center, double angle,
double scale, CvMat* map_matrix );
center 
输入图像的旋转中心坐标 
angle 
旋转角度(度)。正值表示逆时针旋转. 
scale 
各项同性的尺度因子 
map_matrix 
输出 2×3 矩阵的指针 
函数 cv2DRotationMatrix 计算矩阵: 

[ α  β   (1-α)*center.x - β*center.y ]
[ -β  α   β*center.x + (1-α)*center.y ]
这个矩阵似乎是错误的,应该是:

[ α  -β   (1-α)*center.x + β*center.y ]
[ β  α   -β*center.x + (1-α)*center.y ]

但这是把图像坐标看做在左下,而实际按图像坐标是在左上,故应该是前面变换矩阵。


你可能感兴趣的:(学习opencv----放射变换)