几何变换-图像旋转

坐标变换公式如下:
x o = x i cos ⁡ θ − y i sin ⁡ θ y o = x i sin ⁡ θ + y i cos ⁡ θ x_o = x_i \cos \theta - y_i\sin \theta \\ y_o = x_i\sin \theta + y_i \cos \theta xo=xicosθyisinθyo=xisinθ+yicosθ

θ \theta θ为旋转角度

证明:略,有空补,不知道也不妨碍用

仅截止到目前为止,对图像旋转的操作好像是挺简单的.但是这仅仅是理论部分,距离实际情况还有一段距离

首先,问题一:图像在绕着谁转?
根据推导过程可知,这个公式是基于 图像绕原点旋转 得出。而在数组中,这个原点又是索引[0,0]的位置,也就是说,图像绕着左上角旋转, θ > 0 \theta>0 θ>0逆时针; θ < 0 \theta<0 θ<0顺时针

然后我们再考虑这样一个问题:旋转之后会不会导致信息缺失?
按照日常生活的理解,旋转就是坐标的一一映射,通过一定的运算法则由原始图像的坐标得到旋转后的位置,再把对应的像素值传过去。但是在实际情况下,我们可以认为图像是在二维平面上有定义域的,也就是每一个图像都有大小限制,所以说做旋转变换后的坐标可能超出了这个图像的定义域,造成信息缺失。所以,我们在进行旋转前应当预留足够的位置,防止出现缺失

这里引申以下,如果不想要绕左上角旋转,而是图像中心旋转怎么办?
这个问题还是比较好解决的,因为只需要在旋转之前,将旋转中心通过平移操作移动到原点就可以了,旋转之后通过平移操作适当调整位置将图像现实出来
具体见代码

下面开始进行程序实现:以python为例
实验使用图像如下
在这里插入图片描述
实验内容:围绕点(200,150)逆时针旋转30

import numpy as np
import cv2 as cv

img = cv.imread('sample.jpg', cv.IMREAD_GRAYSCALE)
cv.imshow('ori', img)
(H, W) = (700, 700)  # 设定画布大小
ans = np.zeros((H, W), dtype
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值