opencv实现图像几何变换


Posted in Python onMarch 24, 2021

图像伸缩(cv2.resize)

图像的扩大与缩小有专门的一个函数,cv2.resize(),那么关于伸缩需要确定的就是缩放比例,可以是x与y方向相同倍数,也可以单独设置x与y的缩放比例。另外一个就是在缩放以后图像必然就会变化,这就又涉及到一个插值问题。那么这个函数中,缩放有几种不同的插值(interpolation)方法,在缩小时推荐cv2.INTER_ARER,扩大是推荐cv2.INTER_CUBIC和cv2.INTER_LINEAR。默认都是cv2.INTER_LINEAR,比如:

import cv2
import matplotlib.pyplot as plt
 
img = cv2.imread('d:/1.jpg')
# 插值:interpolation
# None本应该是放图像大小的位置的,后面设置了缩放比例,
#所有就不要了
res1 = cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
#直接规定缩放大小,这个时候就不需要缩放因子
height,width = img.shape[:2]
res2 = cv2.resize(img,(2*width,2*height),interpolation=cv2.INTER_CUBIC)
plt.subplot(131)
plt.imshow(img)
plt.subplot(132)
plt.imshow(res1)
plt.subplot(133)
plt.imshow(res2)
plt.show()

opencv实现图像几何变换

图像平移(cv2.warpAffine)

opencv实现图像几何变换

import cv2
import numpy as np
import matplotlib.pyplot as plt
 
img = cv2.imread('d:/1.jpg')
H = np.float32([[1, 0, 100], [0, 1, 50]])
rows, cols = img.shape[:2]
res = cv2.warpAffine(img, H, (rows, cols)) # 需要图像、变换矩阵、变换后的大小
plt.subplot(121)
plt.imshow(img)
plt.subplot(122)
plt.imshow(res)
plt.show()

opencv实现图像几何变换

图像旋转(逆时针旋转,cv2.warpAffine和cv2.getRotationMatrix2D)

opencv实现图像几何变换

为了构造这个矩阵,opencv提供了一个函数:

cv2.getRotationMatrix2D(),这个函数需要三个参数,旋转中心,旋转角度,旋转后图像的缩放比例,比如下例:

import cv2
 import matplotlib.pyplot as plt
 
 img = cv2.imread('d:/1.jpg')
 rows, cols = img.shape[:2]
 # 第一个参数旋转中心,第二个参数旋转角度,第三个参数:缩放比例
 M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 45, 1)
 # 第三个参数:变换后的图像大小
 res = cv2.warpAffine(img, M, (rows, cols))
 
 plt.subplot(121)
 plt.imshow(img)
 plt.subplot(122)
 plt.imshow(res)
 plt.show()

opencv实现图像几何变换

Python 相关文章推荐
让python同时兼容python2和python3的8个技巧分享
Jul 11 Python
python访问类中docstring注释的实现方法
May 04 Python
Python中super关键字用法实例分析
May 28 Python
Python编程对列表中字典元素进行排序的方法详解
May 26 Python
Python排序算法实例代码
Aug 10 Python
Python通过future处理并发问题
Oct 17 Python
python打印n位数“水仙花数”(实例代码)
Dec 25 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
为什么说python更适合树莓派编程
Jul 20 Python
Python datetime模块的使用示例
Feb 02 Python
python 逐步回归算法
Apr 06 Python
浅谈Python数学建模之线性规划
Jun 23 Python
PyQt QMainWindow的使用示例
Mar 24 #Python
PyQt 如何创建自定义QWidget
Mar 24 #Python
解决python 输出到csv 出现多空行的情况
opencv实现图像平移效果
python+selenium小米商城红米K40手机自动抢购的示例代码
Python使用openpyxl复制整张sheet
Mar 24 #Python
基于Python 函数和方法的区别说明
Mar 24 #Python
You might like
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
Python之eval()函数危险性浅析
2014/07/03 Python
python删除列表中重复记录的方法
2015/04/28 Python
python中引用与复制用法实例分析
2015/06/04 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
pandas使用之宽表变窄表的实现
2020/04/12 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
为什么python比较流行
2020/06/19 Python
Python必须了解的35个关键词
2020/07/16 Python
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
简述数组与指针的区别
2014/01/02 面试题
接口的多继承会带来哪些问题
2015/08/17 面试题
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
大学同学十年聚会感言
2014/02/21 职场文书
护士先进个人总结
2015/02/13 职场文书
PHP新手指南
2021/04/01 PHP
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python