python数字图像处理——几何变换(平移、旋转、放缩、镜像)

一.平移

变换公式如下:

图像平移首先定义平移矩阵M,再调用warpAffine()函数实现平移,python函数如下:

M = np.float32([[1, 0, x], [0, 1, y]])
M表示平移矩阵,其中x表示水平平移量,y表示垂直平移量
shifted = cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])
1. src表示原始图像
2. M表示平移矩阵
3. dsize表示变换后的输出图像的尺寸大小
4. dst为输出图像,其大小为dsize,类型与src相同
5. flag表示插值方法的组合和可选值
6. borderValue表示像素外推法,当borderMode = BORDER_TRANSPARENT时,表示目标图像中的像素不会修改源图像中的“异常值”。
7. borderValue用于边界不变的情况,默认情况下为0

二.旋转

例:

旋转前:

x0=rcosby0=rsinb

旋转后:

x1=rcos(b-a)=rcosbcosa+rsinbsina=x0cosa+y0sina

y1=rsin(b-a)=rsinbcosa-rcosbsina=-x0sina+y0cosa

矩阵表示如下:

 一般3-D旋转的变换。将一个空间点P绕一个中心点C旋转可用连续的3个变换来实现:

第1个变换:平移点C到坐标原点。

第2个变换:将P绕原点旋转。

第3个变换:平移点C回到原始位置。

矩阵表示如下:

图像旋转变换主要调用getRotationMatrix2D()函数和warpAffine()函数实现,绕图像的中心旋转,python函数如下:

M = cv2.getRotationMatrix2D(center, angle, scale)
1. center表示旋转中心点,通常设置为(cols/2, rows/2)
2. angle表示旋转角度,正值表示逆时针旋转,坐标原点被定为左上角
3. scale表示比例因子

rotated = cv2.warpAffine(src, M, (cols, rows))
1. src表示原始图像
2. M表示旋转参数,即getRotationMatrix2D()函数定义的结果
3. (cols, rows)表示原始图像的宽度和高度

三.缩放

变换公式如下:

图像缩放(image scaling)是指对数字图像的大小进行调整的过程。在Python中,图像缩放主要调用resize()函数实现,python函数如下:

result = cv2.resize(src, dsize[, result[. fx[, fy[, interpolation]]]])
1. src表示原始图像
2. dsize表示图像缩放的大小
3. result表示图像结果
4. fx表示图像x轴方向缩放大小的倍数
5. fy表示图像y轴方向缩放大小的倍数
6. interpolation表示变换方法。CV_INTER_NN表示最近邻插值;CV_INTER_LINEAR表示双线性插值(缺省使用);CV_INTER_AREA表示使用像素关系重采样,当图像缩小时,该方法可以避免波纹出现,当图像放大时,类似于CV_INTER_NN;CV_INTER_CUBIC表示立方插值
常见的图像缩放两种方式如下所示,第一种方式是将原图像设置为(160, 160)像素大小,第二种方式是将原始图像缩小为0.5倍。

result = cv2.resize(src, (160,160))
result = cv2.resize(src, None, fx=0.5, fy=0.5)


四.镜像

变换公式如下(w为图像的宽度):

在Python中主要调用OpenCV的flip()函数实现图像镜像变换,python函数如下:

dst = cv2.flip(src, flipCode)
1. src表示原始图像
2. flipCode表示翻转方向,如果flipCode为0,则以X轴为对称轴翻转,如果fliipCode>0则以Y轴为对称轴翻转,如果flipCode<0则在X轴、Y轴方向同时翻转。


五.案例及代码

猜你喜欢

转载自blog.csdn.net/hu_666666/article/details/127111484