1) 求一个点沿坐标轴缩放后的位置

2)已知一个点的位置和它绕原点旋转的角度,求旋转后的位置

注意此时的是我们设的一个值,最后会被所替代掉。

注意,trigonometric addition identities就是中学必背的三角函数变换公式:

3)已知一个点的位置和它绕另外一点旋转的角度,和另外一点的位置,求旋转后的位置

若o不是原点,则可先将a点坐标转换为相对坐标计算,计算结果再加上o点坐标。

b.x = (a.x - o.x)*cos(angle) - (a.y - o.y)*sin(angle) + o.x

b.y = (a.x - o.x)*sin(angle) + (a.y - o.y)*cos(angle) + o.y

4)反射

5)组合变换

6)二维变换分解

7)平移和仿射变换(Translation and Affine Transformation)

之前的变换只能对向量进行缩放或旋转,不能平移。要平移需要用下面的方法。

可是单独出现一个上面的平移计算相对于一连串的矩阵乘法而言,增加了计算的复杂度。

解决的方案是在之前的线性变换矩阵中加一个平移用的vector,之前的m部分负责旋转缩放,而增加的vector负责平移,这样就实现了旋转缩放再平移的组合操作,我们

称之为仿射变换(Affine Transformation)。

可那位朋友问了,不是说想实现仅平移吗,怎么还夹带了旋转缩放操作呢?

其实只要控制,使旋转为0,缩放为1,不就实现了仅平移操作了吗,如下,

仿射变换其实也可以表示之前的旋转或缩放操作,只需要把平移vector变成[0, 0, 1],如下

注意到2D的向量[x, y],我们转换成了[x, y, 0] 或 [x, y, 1],选补0还是补1,取决于最后要求的是位移还是坐标。

8)变换矩阵的逆

9) 代码实战

平移一张图片, x轴移动100,y轴移动50

import numpy as np
import cv2 as cv
img = cv.imread('messi5.jpg',0)
rows,cols = img.shape
M = np.float32([[1,0,100],[0,1,50]])
dst = cv.warpAffine(img,M,(cols,rows))
cv.imshow('img',dst)
cv.waitKey(0)
cv.destroyAllWindows()

这里面cv.warpAffine()的第三个参数是输出图片的尺寸,which should be in the form of **(width, height)**.

以图片中心为原点,对整个图片逆时针旋转90度

img = cv.imread('messi5.jpg',0)
rows,cols = img.shape
# cols-1 and rows-1 are the coordinate limits.
M = cv.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),90,1)
dst = cv.warpAffine(img,M,(cols,rows))

以图片中心为原点,对点()逆时针旋转90度

M = cv.getRotationMatrix2D(((cols - 1) / 2.0, (rows - 1) / 2.0), 90, 1)
t0 = np.array([[x0], [y0], [1]], np.int32)
t1 = np.matmul(M, t0)
x1 = int(t1[0][0])
y1 = int(t1[1][0])

通过矩阵操作实现点的2D线性变换(几何变换、仿射变换)相关推荐

  1. 范德蒙德矩阵在MATLAB中怎么表示,Python 之 Python与MATLAB 矩阵操作总结

    Python 之 Python与MATLAB 矩阵操作小结 一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. ...

  2. java 矩阵求逆_java实现的顺时针/逆时针打印矩阵操作示例

    java实现的顺时针/逆时针打印矩阵操作.分享给大家供大家参考,具体如下: public class SnakeMatrix { /** * 定义矩阵的阶数 */ private int n; //填 ...

  3. 矩阵逆时针旋转90度JAVA_java实现的顺时针/逆时针打印矩阵操作示例

    java实现的顺时针/逆时针打印矩阵操作.分享给大家供大家参考,具体如下: public class SnakeMatrix { /** * 定义矩阵的阶数 */ private int n; //填 ...

  4. 玩转 ArrayFire:07 数组和矩阵操作

    目录 前言 一.数组和矩阵操作函数 1. flat( ) 2. flip( ) 3. join( ) 4. moddims( ) 5. reorder( ) 6. shift( ) 7. tile( ...

  5. opencv2矩阵操作

    文章转载自新浪博客:http://blog.sina.com.cn/s/blog_7908e1290101i97z.html 综述: OpenCV有针对矩阵操作的C语言函数. 许多其他方法提供了更加方 ...

  6. Jama包的矩阵操作

    近段时间因为某些功能,需要对矩阵进行操作,然后百度了一下java对矩阵操作的包:一个是math3,另一个是Jama. 从我搜到的内容来看,Jama包对矩阵的操作稍微比math3丰富一些,所以我选择了J ...

  7. OpenCV矩阵操作

    矩阵类的成员函数可以进行很多基本的矩阵操作,在之前已经介绍过.除此之外,也有很多操作被表示为"友元"函数,它们的输入为矩阵类型,或者输出为矩阵类型,或者输入输出同为矩阵类型.下面将 ...

  8. python 读取图片成为一维数组_python+opencv 图像的数组和矩阵操作

    在调用opencv的imread函数读取图像时,我们得到的其实是一个类型为numpy.ndarray的n维数组.这个数组的维度是[height,width,3],它是由每个像素的RGB通道的灰度值组成 ...

  9. python正态分布随机数_Python使用numpy产生正态分布随机数的向量或矩阵操作示例...

    本文实例讲述了Python使用numpy产生正态分布随机数的向量或矩阵操作.分享给大家供大家参考,具体如下: 简单来说,正态分布(Normal distribution)又名高斯分布(Gaussian ...

  10. Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作...

    %测试数据 'ex1data1.txt', 第一列为 population of City in 10,000s, 第二列为 Profit in $10,000s 1 6.1101,17.592 2 ...

最新文章

  1. docker容器-实战(分享十六)
  2. 最小熵原理:“物以类聚”之从图书馆到词向量
  3. [转] 程序员面试题精选100题(35)-找出两个链表的第一个公共结点
  4. 一步步编写操作系统 50 加载内核3
  5. svchost占用内存过高_是什么导致你的Java服务器内存和CPU占用过高呢
  6. Spring源码追踪3——AOP机制
  7. C/C++库函数math用法案例篇一
  8. vue中获取输入框中得到值_如何获取vue input的值
  9. 设计模式03-工厂方法
  10. thinkphp 表单令牌
  11. tensorflow小案例
  12. C# 创建、读取Excel公式
  13. mysql数据库恢复
  14. html lab颜色,颜色标准LAB值对照表
  15. 利用tftpd32拷贝windows文件到虚拟机ubuntu中
  16. java 一年有多少周_用java怎么计算当前年有多少周
  17. 基于Pygame的中国象棋的制作(China Chess)
  18. primeng的Tree初始化选中,实现联动效果
  19. HFDS的Shell操作
  20. linux下rename用法--批量重命名

热门文章

  1. LSI存储论坛:6Gb SAS让DAS焕发新活力?
  2. 我个人的未来5年IT学习计划
  3. Iterm2 配置(不断更新)
  4. matplotlib绘制李萨如图(二) animation实现动态2D李萨如图
  5. http抓包实践--(一)--fiddler和http(s)
  6. k8s中资源对象单数、复数、简写的区别
  7. 三本学计算机没用吗,腾讯员工:我211学计算机都觉得写代码难,三本的人能写代码为啥考不上211...
  8. python优点和特点-Python的优点和缺点有哪些?Python语言的特点
  9. 服务器虚拟机要怎么安装,服务器虚拟机怎么安装
  10. 初级药师职称需要考计算机英语吗,药师职称评审政策解读:初级药师不用再考了!...