189 8069 5689

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

这篇文章主要介绍“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怎么保持图像内容的旋转”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


网站栏目:opencv怎么保持图像内容的旋转
文章链接:http://cdxtjz.cn/article/igoeee.html

其他资讯