这篇文章主要介绍“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怎么保持图像内容的旋转”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款