python 图像旋转与坐标旋转
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 图像旋转与坐标旋转相关推荐
- python 横坐标旋转_Python坐标旋转/移动指令
可以沿北/南或东/西轴移动,因为旋转限制为90度.在 您可以观察到,任何移动都将具有北/南分量和东/西分量.在 如果你的动作一致,那么你离下一步只有90度的距离:1. turn east or wes ...
- 二维,三维坐标旋转,左右手坐标系
1.向量旋转矩阵和坐标旋转矩阵区别 坐标旋转: 坐标旋转对应的是点在另一个坐标系的位置,设点A在xoy中为(x,y),在坐标系x'oy'下坐标是(x',y'),旋转角度由x向y,逆时针旋转.则他们关系 ...
- 【Maya】移动、缩放、旋转、万向节旋转、冻结(未完成)
本章目录 知识结构 快捷键 位移 改变坐标系 不同坐标系的区别 归零的区别 子物体沿父物体坐标轴移动(惯性坐标) 缩放 改变坐标系 使用对象坐标进行缩放 旋转 改变坐标系 世界坐标旋转 物体坐标旋转 ...
- 坐标系旋转与向量旋转(旋转矩阵)
二维坐标系旋转与向量(坐标)旋转 坐标系的旋转和向量的旋转在工程应用过程中经常会遇到,在这里对二维坐标系的旋转和向量旋转做一个简单的推导,方便大家的理解. 坐标系旋转 一个平面坐标系逆时针旋转一个角度 ...
- 【Python-随机旋转】图像随机旋转及坐标进行旋转原理
在做人脸或物体检测的任务中,往往需要对训练集进行随机旋转,做数据增强,增加模型的鲁棒性. 在进行图像随机旋转的同时,相应的label值坐标也要进行相应的旋转. 如人脸关键点检测中人脸对应的关键点坐标, ...
- 数据增强之图像旋转及坐标对应(附代码)
海康威视研究院ImageNet2016竞赛经验分享 深度学习之图像的数据增强 data augmentation 数据增强方法总结 图片的数据增强(Data Augmentation)方法 openc ...
- halcon旋转后坐标_基于FPGA的图像旋转设计
该项目是参加2019届全国大学生FPGA大赛的作品,系统主要实现视频任意角度旋转.利用国产的紫光同创公司的FPGA芯片作为开发平台,视频图像从摄像头实时采集,经过算法旋转后,通过hdmi接口显示.该项 ...
- Python:利用python编程实现三维图像绘制展示(六面体旋转、三维球柱状体、下雪场景等)
Python:利用python编程实现三维图像绘制展示(六面体旋转.三维球柱状体.下雪场景等) 目录 利用python编程实现三维图像绘制展示(六面体旋转.三维球柱状体.下雪场景等) 1.实现六面体旋 ...
- halcon旋转后坐标_FPGA大赛【八】具体模块设计图像旋转方案
[注]该项目是我们团队参加2019届全国大学生FPGA大赛的作品,系统主要实现视频任意角度旋转.该项目最终晋级决赛,并获得紫光同创企业特别奖.该系列文章介绍我们团队的作品.关注公众号"数字积 ...
最新文章
- Java学习总结:28
- 利用JS将页面指定部分存为HTML页
- 【项目管理】Project使用
- mysql主从复制-mysqldump
- java keypad game,Take character and return the Keypad equivalant
- window使用技巧记录
- php如何根据ip查找地址,根据IP地址查找IP所在地
- opencv-api drawContours
- orange实现逻辑回归_逻辑回归模型
- Python 3.5安装JPype
- OpenCasCade由一个基础形状拉伸形成其它形状的问题
- 快速求实对称矩阵特征向量的技巧
- 用plsql将excel导入oracle,使用工具 plsqldev将Excel导入Oracle数据库
- 前端报错http 405错误
- js将对象会集合转换为json字符串。Jackson
- 搭建nlp_server服务器
- 计算机毕业设计Python+uniapp养花助手小程序(小程序+源码+LW)
- css修改element组件中el-date-picker中的placeholder样式失效
- 回溯法求解装载问题(DFS + 剪枝策略)
- 从京东IPO看电商的下一个十年