图像处理(五)图像旋转

首先复习一个公式,平面上的点绕原点逆时针旋转θº,则其坐标变换公式为:

                                                                                     

其中,(x, y)为原图坐标,(x’, y’)为旋转后的坐标。它的逆变换公式为:

                                                                                     

矩阵形式为:

                                                                                    

和缩放类似,旋转后的图像的像素点也需要经过坐标转换为原始图像上的坐标来确定像素值,同样也可能找不到对应点,因此旋转也用到插值法。在此选用性能较好的双线性插值法。为提高速度,我在处理旋转90º、-90º、±180º时使用了镜像来处理。

以下是具体算法实现:

 

/// <summary>
    /// 图像旋转
    /// </summary>
    /// <param name="srcBmp">原始图像</param>
    /// <param name="degree">旋转角度</param>
    /// <param name="dstBmp">目标图像</param>
    /// <returns>处理成功 true 失败 false</returns>
    public static bool Rotation(Bitmap srcBmp, double degree, out Bitmap dstBmp) {
        if (srcBmp == null) {
            dstBmp = null;
            return false;
        }
        dstBmp = null;
        BitmapData srcBmpData = null;
        BitmapData dstBmpData = null;
        switch ((int)degree) {
            case 0:
                dstBmp = new Bitmap(srcBmp);
                break;
            case -90:
                dstBmp = new Bitmap(srcBmp.Height, srcBmp.Width);
                srcBmpData = srcBmp.LockBits(new Rectangle(0, 0, srcBmp.Width, srcBmp.Height), ImageLockMode.ReadOnly, Pixel
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值