温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

opencv怎么保持图像内容的旋转

发布时间:2021-09-17 11:16:24 来源:亿速云 阅读:118 作者:chen 栏目:大数据

这篇文章主要介绍“opencv怎么保持图像内容的旋转”,在日常操作中,相信很多人在opencv怎么保持图像内容的旋转问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”opencv怎么保持图像内容的旋转”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在opencv中,旋转图像只需调用以下代码:

M = cv2.getRotationMatrix2D((width//2, height//2), 45, 1)
image_new = cv2.warpAffine(image, M, (width, height))

但这样调用会损失图像内容,如下: opencv怎么保持图像内容的旋转cdn.nlark.com/yuque/0/2020/png/1445121/1599750201721-e1633576-dcb6-45a7-8550-da35510ff367.png">

opencv怎么保持图像内容的旋转

但很多时候我们希望旋转之后图像依然完整: opencv怎么保持图像内容的旋转

下面给出一种解决方案:

def rotate_keep(degree, width, height):
    """
    无损图像的旋转
    @param degree:
    @param width:
    @param height:
    @return: 旋转矩阵,新的宽高
    """
    height_new = int(width * fabs(sin(radians(degree))) + height * fabs(cos(radians(degree))))
    width_new = int(height * fabs(sin(radians(degree))) + width * fabs(cos(radians(degree))))
    mat_rotation = cv2.getRotationMatrix2D((width / 2, height / 2), degree, 1)
    mat_rotation[0, 2] += (width_new - width) / 2
    mat_rotation[1, 2] += (height_new - height) / 2
    return mat_rotation, width_new, height_new

angle = 45
height, width = image.shape[0:2]
M, width_new, height_new = rotate_keep(45, width, height)
image_new = cv2.warpAffine(image, M, (width_new, height_new))

代码是把整个过程分为三个步骤

  1. 先将图片旋转

  2. 计算旋转之后理论的图像大小

  3. 将图像平移使得坐标为负的地方平移后坐标为正

到此,关于“opencv怎么保持图像内容的旋转”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI