1.图像旋转

image1=image1.rotate(angle)

np.rot90()

2.坐标旋转

一、首先来说一下关于像素旋转一定角度后的对应位置:

(1)旋转中心为左上角原点:

旋转有一个绕什么转的问题。我们先来看最简单的,绕第一个像素转,则旋转的情况会像这样:

令旋转前有

旋转a角度后有

以矩阵形式表示为

(2)旋转中心为图像中心:

当图片较大时,计算会很慢。主要是判断和计算太多了这里只讨论图像处理,程序的优化暂时放一边运行结果如下:

我们能看到,旋转后的图像有很多“蜂窝煤”。主要是点转换后要取整。导致原图中有些点映射到同一个点,而生成的图中有些点在原图中没有点映射到它。所以出现了很多“蜂窝煤”。果然理论还只是理论啊 下面我们来看看更通常一点的做法:以图像的中心为圆心进行旋转。这里涉及到一个坐标系的转换问题。看下图:

在矩阵中我们的坐标系通常是AB和AC方向的,而传统的笛卡尔直角坐标系是DE和DF方向的。令图像表示为M×N的矩阵,对于点A而言,两坐标系中的坐标分别是(0,0)和(-N/2,M/2)矩阵中点(x',y')转换为笛卡尔坐标系(x,y)的转换关系为:

逆变换为

于是我们得到图像以中心旋转的思路

  • 将矩阵坐标上点(原谅我这样称呼它)转换为笛卡尔坐标系
  • 将该点旋转a度。旋转公式前面已经给出了
  • 将旋转后的点再转换为矩阵坐标

于是得到最后结果

python中numpy有矩阵运算能力,但这里我们直接进行数值计算就可以了。用方程表示如下:

关键代码如下:

def rotatecordiate(angle,rect):angle=angle*math.pi/180n=1600m=1200def onepoint(x,y):# X = x*math.cos(angle) - y*math.sin(angle)-0.5*n*math.cos(angle)+0.5*m*math.sin(angle)+0.5*n# Y = y*math.cos(angle) + x*math.sin(angle)-0.5*n*math.sin(angle)-0.5*m*math.cos(angle)+0.5*mX = x * math.cos(angle) - y * math.sin(angle) - 0.5 * n * math.cos(angle) + 0.5 * m * math.sin(angle) + 0.5 * nY = y * math.cos(angle) + x * math.sin(angle) - 0.5 * n * math.sin(angle) - 0.5 * m * math.cos(angle) + 0.5 * mreturn [int(X),int(Y)]newrect=[]for i in range(4):point=onepoint(rect[i*2],rect[i*2+1])newrect.extend(point)newrect.extend([1])print(newrect)return newrect

参考:https://www.cnblogs.com/zf-blog/p/8947800.html

(3)旋转中心为矩形框中心:

def rotatecordiate(angle,rect):anglePi = -angle * math.pi / 180.0cosA = math.cos(anglePi)sinA = math.sin(anglePi)x=rect[0]y=rect[1]width=rect[2]height=rect[3]x1 = x - 0.5 * widthy1 = y - 0.5 * heightx0 = x + 0.5 * widthy0 = y1x2 = x1y2 = y + 0.5 * heightx3 = x0y3 = y2x0n = (x0 - x) * cosA - (y0 - y) * sinA + xy0n = (x0 - x) * sinA + (y0 - y) * cosA + yx1n = (x1 - x) * cosA - (y1 - y) * sinA + xy1n = (x1 - x) * sinA + (y1 - y) * cosA + yx2n = (x2 - x) * cosA - (y2 - y) * sinA + xy2n = (x2 - x) * sinA + (y2 - y) * cosA + yx3n = (x3 - x) * cosA - (y3 - y) * sinA + xy3n = (x3 - x) * sinA + (y3 - y) * cosA + yreturn [(x0n,y0n),(x1n,y1n),(x2n,y2n),(x3n,y3n)]

绘制多边形:

plt.Polygon(rotatecordiate(angle,rect),color=color, fill=False, linewidth=2)

python 图像旋转与坐标旋转相关推荐

  1. python 横坐标旋转_Python坐标旋转/移动指令

    可以沿北/南或东/西轴移动,因为旋转限制为90度.在 您可以观察到,任何移动都将具有北/南分量和东/西分量.在 如果你的动作一致,那么你离下一步只有90度的距离:1. turn east or wes ...

  2. 二维,三维坐标旋转,左右手坐标系

    1.向量旋转矩阵和坐标旋转矩阵区别 坐标旋转: 坐标旋转对应的是点在另一个坐标系的位置,设点A在xoy中为(x,y),在坐标系x'oy'下坐标是(x',y'),旋转角度由x向y,逆时针旋转.则他们关系 ...

  3. 【Maya】移动、缩放、旋转、万向节旋转、冻结(未完成)

    本章目录 知识结构 快捷键 位移 改变坐标系 不同坐标系的区别 归零的区别 子物体沿父物体坐标轴移动(惯性坐标) 缩放 改变坐标系 使用对象坐标进行缩放 旋转 改变坐标系 世界坐标旋转 物体坐标旋转 ...

  4. 坐标系旋转与向量旋转(旋转矩阵)

    二维坐标系旋转与向量(坐标)旋转 坐标系的旋转和向量的旋转在工程应用过程中经常会遇到,在这里对二维坐标系的旋转和向量旋转做一个简单的推导,方便大家的理解. 坐标系旋转 一个平面坐标系逆时针旋转一个角度 ...

  5. 【Python-随机旋转】图像随机旋转及坐标进行旋转原理

    在做人脸或物体检测的任务中,往往需要对训练集进行随机旋转,做数据增强,增加模型的鲁棒性. 在进行图像随机旋转的同时,相应的label值坐标也要进行相应的旋转. 如人脸关键点检测中人脸对应的关键点坐标, ...

  6. 数据增强之图像旋转及坐标对应(附代码)

    海康威视研究院ImageNet2016竞赛经验分享 深度学习之图像的数据增强 data augmentation 数据增强方法总结 图片的数据增强(Data Augmentation)方法 openc ...

  7. halcon旋转后坐标_基于FPGA的图像旋转设计

    该项目是参加2019届全国大学生FPGA大赛的作品,系统主要实现视频任意角度旋转.利用国产的紫光同创公司的FPGA芯片作为开发平台,视频图像从摄像头实时采集,经过算法旋转后,通过hdmi接口显示.该项 ...

  8. Python:利用python编程实现三维图像绘制展示(六面体旋转、三维球柱状体、下雪场景等)

    Python:利用python编程实现三维图像绘制展示(六面体旋转.三维球柱状体.下雪场景等) 目录 利用python编程实现三维图像绘制展示(六面体旋转.三维球柱状体.下雪场景等) 1.实现六面体旋 ...

  9. halcon旋转后坐标_FPGA大赛【八】具体模块设计图像旋转方案

    [注]该项目是我们团队参加2019届全国大学生FPGA大赛的作品,系统主要实现视频任意角度旋转.该项目最终晋级决赛,并获得紫光同创企业特别奖.该系列文章介绍我们团队的作品.关注公众号"数字积 ...

最新文章

  1. Java学习总结:28
  2. 利用JS将页面指定部分存为HTML页
  3. 【项目管理】Project使用
  4. mysql主从复制-mysqldump
  5. java keypad game,Take character and return the Keypad equivalant
  6. window使用技巧记录
  7. php如何根据ip查找地址,根据IP地址查找IP所在地
  8. opencv-api drawContours
  9. orange实现逻辑回归_逻辑回归模型
  10. Python 3.5安装JPype
  11. OpenCasCade由一个基础形状拉伸形成其它形状的问题
  12. 快速求实对称矩阵特征向量的技巧
  13. 用plsql将excel导入oracle,使用工具 plsqldev将Excel导入Oracle数据库
  14. 前端报错http 405错误
  15. js将对象会集合转换为json字符串。Jackson
  16. 搭建nlp_server服务器
  17. 计算机毕业设计Python+uniapp养花助手小程序(小程序+源码+LW)
  18. css修改element组件中el-date-picker中的placeholder样式失效
  19. 回溯法求解装载问题(DFS + 剪枝策略)
  20. 从京东IPO看电商的下一个十年

热门文章

  1. 常熟理工php实验三_西普学院(实验吧)Web题解
  2. Excel教程之学生成功所需的 5 个电子表格
  3. 计算机网络钟中PCF,串行时钟PCF8583在微机保护装置中的应用
  4. xinjun与阴阳师
  5. 试岗/试用期没有通过,就不给发工资?|智测优聘总结
  6. JavaScript的入门学习
  7. 在linux环境下离线安装Nginx
  8. PHP的self和static区别
  9. TeamView安装和配置说明
  10. 【RAC】rac环境下的数据库备份与还原