概述

图像的几何变换主要包括:平移、旋转、缩放、剪切、仿射、透视等。
图像的几何变换主要分为:刚性变换、相似变换、仿射变换和透视变换(投影变换)

  • 刚性变换:平移+旋转
  • 相似变换:缩放+剪切
  • 仿射变换:从一个二维坐标系变换到另一个二维坐标系,属于线性变换。通过已知3对坐标点可以求得变换矩阵
  • 透视变换:从一个二维坐标系变换到一个三维坐标系,属于非线性变换。通过已知4对坐标点可以求得变换矩阵。

仿射变换

仿射变换(Affine Transformation)是指在向量空间中进行一次线性变换(乘以一个矩阵)和一次平移(加上一个向量),变换到另一个向量空间的过程。
仿射变换代表的是两幅图之间的映射关系,仿射变换矩阵为2x3的矩阵,如下图中的矩阵M,其中的B起着平移的作用,而A中的对角线决定缩放,反对角线决定旋转或错切。

原像素点坐标(x,y),经过仿射变换后的点的坐标是T,则矩阵仿射变换基本算法原理:

所以仿射变换是一种二维坐标(x,y)到二维坐标(u,v)之间的线性变换,其数学表达式如下:

这个矩阵是2×3的,但是这会改变原始图像的维度,为此,增加一个维度,构造齐次变换矩阵3×3

这就保持了图像的‘平直性’和‘平行性’。
平直性:直线、圆弧不变
平行性:平行关系不变,直线相对位置不变,但是夹角可能会改变。

opencv实现

仿射变化需要一个转换矩阵,但是由于仿射变换比较复杂,一般很难直接找到这个矩阵,opencv提供了根据源图像和目标图像上三个对应的点来自动创建变换矩阵,矩阵维度为 2x3。
这个函数是:cv2.getAffineTransform(pos1,pos2)
最后这个矩阵会被传给函数 cv2.warpAffine()来实现仿射变换。

import cv2
import numpy as np img = cv2.imread('me.jpg')
height, width = img.shape[:2]# 在原图像和目标图像上各选择三个点
mat_src = np.float32([[0, 0],[0, height-1],[width-1, 0]])
mat_dst = np.float32([[0, 0],[100, height-100],[width-100, 100]]) # 得到变换矩阵
mat_trans = cv2.getAffineTransform(mat_src, mat_dst)
# 进行仿射变换
dst = cv2.warpAffine(img, mat_trans, (width,height)) # 显示
imgs = np.hstack([img,dst])
cv2.namedWindow('imgs', cv2.WINDOW_NORMAL)
cv2.imshow("imgs",imgs)
cv2.waitKey(0)

图像的仿射变换:cv2.warpAffine()相关推荐

  1. opencv图像仿射变换,cv2.warpAffine

    目录 仿射变换原理介绍 cv2.warpAffine函数介绍 代码实例 仿射变换原理介绍 仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间. 在有 ...

  2. Opencv:图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数

    学习记录如何使用opencv实现对图像的旋转操作. 1 cv2.getRotationMatrix2D(center, angle, scale) 图像的旋转矩阵一般为: 但是单纯的这个矩阵是在原点处 ...

  3. 【OpenCV 例程200篇】25. 图像的平移(cv2.warpAffine)

    『youcans 的 OpenCV 例程200篇 - 总目录』 [youcans 的 OpenCV 例程200篇]25. 图像的平移 平移是物体位置在水平和垂直方向的移动. 像素点 (x,y) 沿 x ...

  4. OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D()

    OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D() 一个任意的仿射变换都能表示为乘以一个矩阵(线性变换)接着再加上一个向量(平移)的形式. ...

  5. opencv python 图像缩放/图像平移/图像旋转/仿射变换/透视变换

    Geometric Transformations of Images 1图像转换 OpenCV提供了两个转换函数cv2.warpAffine和cv2.warpPerspective,可以使用它们进行 ...

  6. OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔

    1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小. API cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参 ...

  7. 三维错切变换矩阵_图像的仿射变换

    目录: 概述 图像基本变换 仿射变换 原理 python实现 一.概述 图像的几何变换主要包括:平移.缩放.旋转.仿射.透视等等.图像变换是建立在矩阵运算基础上的,通过矩阵运算可以很快的找到不同图像的 ...

  8. 【OpenCV 例程200篇】24. 图像的仿射变换

    [OpenCV 例程200篇]24. 图像的仿射变换 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 几何变换的可以分 ...

  9. [图像几何变换]——图像的仿射变换、透射变换及图像金字塔

    一.仿射变换 [图像预处理] 1.介绍 图像的仿射变换涉及到图像的形状位置角度的变化,是深度学习预处理中常用的功能,仿射变换主要是对图像的缩放.旋转.翻转和平移等操作的组合.注意:变换矩阵中是6个点, ...

最新文章

  1. java设计模式---享元模式
  2. PowerShell2.0之Windows排错(一)启动故障排错
  3. 安卓学习-界面-ui-RadioButton CheckBox
  4. laravel 中创建全局函数 (类似于 TP 中 functions.php) 的方式
  5. Vitaly and Night
  6. DLL文件无法删除怎么解决
  7. PE文件格式和ELF文件格式(上)----PE文件
  8. 【汇编语言】王爽实验5(5)(6)的解答 建立数据类型匹配的观念
  9. linux命令 ps -ef 的含义
  10. mysql10.3修改默认存储路径
  11. python如何读取文本_python怎么读取文本文件
  12. [转帖]漫画趣解Linux内核
  13. animation 循环_汽车前照灯与前雾灯热循环试验
  14. Unicode字符编码
  15. 2点睡10点起不算熬夜?除非你每天都能执行
  16. 冲向2021 荣耀“无限”创新
  17. 颜色选择器---Kodu少儿编程第九天
  18. 哪款蓝牙耳机适合吃鸡?盘点2022适合苹果吃鸡的蓝牙耳机
  19. xshell6使用技巧_Xshell 6怎么设置为中文-Xshell 6设置为中文的方法 - 河东软件园
  20. 鸿蒙系统和安卓的区别在哪里,有什么不同

热门文章

  1. 解决不同版本jar包引入问题,修改jar包包名
  2. Python移动自动化测试面试准备
  3. git生成公钥的步骤
  4. Qlik之的应用备份(.qvf) (六)
  5. 一年三 季 醋 泡 姜
  6. chrome 谷歌浏览器模拟各种手机设置userAgent
  7. matlab启动慢的解决方法
  8. 一步一步教你写DOTA外挂
  9. 程序员深思语,导师语录
  10. PS批量处理图片尺寸