千家信息网

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

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,这篇文章主要介绍"opencv怎么保持图像内容的旋转",在日常操作中,相信很多人在opencv怎么保持图像内容的旋转问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"ope
千家信息网最后更新 2024年11月20日opencv怎么保持图像内容的旋转

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

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

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

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

但很多时候我们希望旋转之后图像依然完整:

下面给出一种解决方案:

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

0