图像处理之几何变换

几何变换的概念与应用

    几何变换是将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置,改变图像的几何位置、几何形状、几何尺寸等几何特征。其实质是改变像素的空间位置,估算新空间位置上的像素值。包括图像的平移变换、镜像变换、转置变换、旋转变换、图像缩放。
    例如在车牌识别的预处理中,首先就需要对倾斜的车牌进行矫正,然后再进行其他处理。
    图像集合变换的表达式为(x,y)=T{(u,v)}

平移、旋转的原理

    对于缩放、平移可以以图像坐标原点(图像左上角为原点)为中心变换,这不用坐标系变换,直接按照一般形式计算即可。而对于旋转和偏移,一般是以图像中心为原点,那么这就涉及坐标系转换。
    平移不改变图像的大小,只是改变了图像的位置,就是将所有坐标分别加上指定的垂直偏移量。
	   x' = x + Δx
	   y' = y + Δy
    旋转需要将图像的坐标进行转换。转换成以中心点为原点的数学坐标系。过程为
        由输入图像的坐标系转化为数学坐标系。
	    通过数学旋转坐标系计算指定像素旋转后的坐标。
	    由旋转坐标系转换为输出图像的坐标系。

代码实现平移、旋转操作

def trans(img):
   '''
    Task02 几何变换
    :return:
    '''
    cols = int(img.shape[1])
    rows = int(img.shape[0])
    m_x = 100  # x轴平移100
    m_y = 200  # y轴平移200
    affine_translation = np.array([[1, 0, m_x], [0, 1, m_y]], np.float32)  # 仿射变换矩阵
    translation = cv2.warpAffine(img,  # 进行几何变换的图片
                                 affine_translation,  # 几何变换的关系矩阵
                                 (cols, rows),   # 进行变换的中心坐标
                                 borderValue=[125,125,125]  # 边界填充的颜色
                                 )

    #在平移的基础上 绕图像的中心旋转
    center_point = (cols/2,rows/2)   # 旋转中心点
    angle = 30  # 旋转角度
    scale = 1  # 图像缩放因子即缩放比例
    affine_rotation = cv2.getRotationMatrix2D(center_point, angle, scale)  # 仿射变换矩阵
    rotation = cv2.warpAffine(translation,  # 进行几何变换的图片
                                    affine_rotation,  # 几何变换的关系矩阵
                                    (cols, rows),  # 进行变换的中心坐标
                                    borderMode=1,  # 边界填充的样式
                                    borderValue=125  # 边界填充的颜色
                                    )

    print("shape1 : ",translation.shape)
    print("shape2 : ",rotation.shape)
    cv2.imshow('translation', translation)
    cv2.imshow('rotation', rotation)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    return


if __name__ == "__main__":
    img = cv2.imread('./xiabang.jpg', cv2.IMREAD_UNCHANGED)
    print('Original Dimensions : ',img.shape)
    trans(img)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值