这篇文章主要介绍“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_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))
代码是把整个过程分为三个步骤
先将图片旋转
计算旋转之后理论的图像大小
将图像平移使得坐标为负的地方平移后坐标为正
到此,关于“opencv怎么保持图像内容的旋转”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。