图像几何变换

图像几何变换从原理上看主要包括两种:基于2x3矩阵的仿射变换(平移、缩放、旋转、翻转)、基于3x3矩阵的透视变换。

图像平移

opencv实现图像平移

实现图像平移,我们需要定义下面这样一个矩阵,tx和ty分别是x和y方向上平移的距离:

图像平移利用仿射变换函数 cv.warpAffine() 实现

实验

# 图像平移
import numpy as np
import cv2 as cvimg = cv.imread('paojie.jpg')rows, cols = img.shape[:2]# 定义平移矩阵,需要是numpy的float32类型
# x轴平移100,y轴平移50
M = np.float32([[1, 0, 100], [0, 1, 50]])
# 用仿射变换实现平移,第三个参数为dst的大小
dst = cv.warpAffine(img, M, (cols, rows))cv.imshow('shift', dst)
cv.waitKey(0)
cv.destroyAllWindows()

实验结果

图像缩放

opencv中的图像缩放

缩放就是调整图片的大小,使用cv.resize()函数实现图像缩放。可以按照比例缩放,也可以按照指定的大小缩放。

实验

# 图像缩放
import numpy as np
import cv2 as cvimg = cv.imread('paojie.jpg')# 按照指定的宽度、高度缩放图片
res = cv.resize(img, (132, 150))
# 按照比例缩放,如x,y方向均放大一倍
# res2 = cv.resize(img, None, fx=2, fy=2, interpolation=cv.INTER_CUBIC)cv.imshow('shrink', res)
# cv.imshow('zoom', res2)
cv.waitKey(0)
cv.destroyAllWindows()

实验结果

各种interpolation方式

参考:各种插值方法介绍

图像旋转

简介

旋转同平移一样,也是用仿射变换实现的,因此也需要定义一个变换矩阵。OpenCV直接提供了 cv.getRotationMatrix2D()函数来生成这个矩阵,该函数有三个参数:
参数1:图片的旋转中心
参数2:旋转角度(正:逆时针,负:顺时针)
参数3:缩放比例,0.5表示缩小一半

实验

# 图像旋转
import numpy as np
import cv2 as cvimg = cv.imread('paojie.jpg')
rows,cols = img.shape[:2]# 逆时针45°旋转图片并缩小一半,第一个参数为旋转中心
M = cv.getRotationMatrix2D((cols / 2, rows / 2), 45, 0.5)
# img:源图像;M:旋转仿射矩阵;(cols,rows):dst的大小
dst = cv.warpAffine(img, M, (cols, rows))cv.imshow('rotation', dst)
cv.waitKey(0)
cv.destroyAllWindows()

实验结果

图像翻转

opencv中的图像翻转

dst = cv2.flip(img, 1)
其中,函数中的第二个参数大于0,表示图像水平翻转(沿y轴);第二个参数等于0,表示图像垂直翻转(沿x轴);第二个参数小于0,表示图像既水平翻转,又垂直翻转。

实验

# 图像翻转
import numpy as np
import cv2 as cv
import matplotlib.pyplot as pltimg = cv.imread('paojie.jpg')# 水平翻转
hor = cv.flip(img,1)
# 垂直翻转
ver = cv.flip(img,0)
# 水平垂直翻转
hor_ver = cv.flip(img,-1)plt.figure(1)
plt.subplot(2,2,1)
plt.imshow(img)
plt.title('Original')
plt.xticks([]),plt.yticks([])plt.subplot(2,2,2)
plt.imshow(hor)
plt.title('horizontal')
plt.xticks([]),plt.yticks([])plt.subplot(2,2,3)
plt.imshow(ver)
plt.title('vertical')
plt.xticks([]),plt.yticks([])plt.subplot(2,2,4)
plt.imshow(hor_ver)
plt.title('horizontal_and_vertical')
plt.xticks([]),plt.yticks([])plt.show()

实验结果


看完了整篇文章,不点个赞放松一下。

opencv 图像平移、缩放、旋转、翻转 图像仿射变换相关推荐

  1. OpenCV图像几何变换专题(缩放、翻转、仿射变换及透视)【python-Open_CV系列(五)】

    OpenCV图像几何变换专题(缩放.翻转.仿射变换及透视)(python为工具) [Open_CV系列(五)] 文章目录 准备图片 1. 缩放 cv2.resize()方法 2. 翻转 cv2.fli ...

  2. [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  3. R语言使用magick包的image_rotate函数、image_flip函数、image_flop函数对图像进行缩放旋转、镜像、翻转(Rotate or mirror the image)

    R语言使用magick包的image_rotate函数.image_flip函数.image_flop函数对图像进行缩放旋转.镜像.翻转(Rotate or mirror the image) 目录

  4. MATLAB图像平移、旋转、缩放、裁剪

    版本: MATLAB R2019a 目录 (一)图像平移 (二)图像旋转 1.图像尺寸不变 2.图像信息不丢失 (三)图像缩放 (四)图像裁剪 (一)图像平移 使用MATLAB自带函数 transla ...

  5. qgraphicsview鼠标移动图片_交互式QGraphicsView(平移/缩放/旋转)-阿里云开发者社区...

    简述 Graphics View提供了一个平台用于大量自定义 2D 图元的管理与交互框架包括一个事件传播架构支持场景 Scene 中的图元 Item 进行精确的双精度交互功能.Item 可以处理键盘事 ...

  6. python如何移动图片_python之详细图像仿射变换讲解(图像平移、旋转、缩放、翻转),一文就够了,赶紧码住...

    仿射变换简介 什么是放射变换 图像上的仿射变换, 其实就是图片中的一个像素点,通过某种变换,移动到另外一个地方. 从数学上来讲, 就是一个向量空间进行一次线形变换并加上平移向量, 从而变换到另外一个向 ...

  7. opencv(c++)几何变换------图像平移、旋转、缩放、翻转、剪贴

    仿射变换 平移.旋转.缩放.翻转.剪切等变换都属于仿射变换.事实上,仿射变换代表的是两幅图之间的关系. 1. 图像平移 //平移操作,图像大小不变 Mat imageTranslation1(cv:: ...

  8. [Python图像处理] 三十六.OpenCV图像几何变换万字详解(平移缩放旋转、镜像仿射透视)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  9. C语言数字图像处理---1.5图像基本变换之平移缩放旋转

    本篇作为新年到来前的最后一篇,提前祝大家新年快乐! 图像几何变换又叫做图像基本变换,主要包括图像平移.图像缩放和图像旋转几个部分,当然还有图像镜像等简单的内容.图像基本变换是图像处理的基本内容,是学习 ...

  10. python-opencv 图像平移旋转变换、以及图像旋转前后坐标值映射关系

    图像的平移,旋转变换以及仿射与投影都需要先定义转换矩阵,然后使用cv2.warpAffine()根据变换矩阵完成转换 imgRotation = cv2.warpAffine(img, mat,(wi ...

最新文章

  1. 网络推广外包——网络推广外包专员升级用户使用体验有方法
  2. Android Support 包里到底有什么
  3. POST的表单数据参数过多问题
  4. Leetcode--149. 直线上最多的点数
  5. 各个阶级的前端 必须掌握的基本技能汇总
  6. Java分布式二手房项目尚好房第二课 用户角色管理
  7. ffmpeg php 使用教程_php的ffmpeg - CSDN博客
  8. python股票收益率协方差_[Python]如何利用TuShare计算各股票间的相关性和协方差
  9. wps复选框怎么设置,wps表格中如何插入复选框?
  10. 【探路者】10月13日立会报告(团队第1周-第1次)
  11. 五年磨一剑,灵雀云的蜕变
  12. matlab散点图折线图_什么是散点图以及何时使用
  13. 量子计算新突破:为奇异分数量子态与超导耦合提供机会
  14. 超级玛丽游戏(C语言)
  15. PostgreSQL数据库连接
  16. linux学习笔记2——ls命令说明
  17. 双非二本毕业生,惨遭滑铁卢,132天惨淡求职之路....
  18. [xia谈]做一个爱家的程序员
  19. 第22章 事件驱动架构软件测试
  20. 【计算机取证期末复习题】

热门文章

  1. 免费python网络课程-2019年10种免费的Python学习课程
  2. python 代码命令大全-深度学习中python常用命令
  3. 『开源项目』基于STM32的智能垃圾桶之语音识别
  4. ajax传递timestamp,解决ajax请求自动增加时间戳问题
  5. 【王道操作系统笔记】系统调用
  6. 【深入理解JVM】引用,句柄,指针分别是什么?
  7. LeetCode 48 旋转图像
  8. 开源项目管理系统:ProjectForge
  9. MFC的多国语言界面的实现
  10. ggbiplot设置分组_prcomp和ggbiplot:无效的’rot’值