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 元类使用说明
Dec 18 Python
跟老齐学Python之从格式化表达式到方法
Sep 28 Python
一个基于flask的web应用诞生(1)
Apr 11 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
Python常见的pandas用法demo示例
Mar 16 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
python和go语言的区别是什么
Jul 20 Python
python与js主要区别点总结
Sep 13 Python
selenium.webdriver中add_argument方法常用参数表
Apr 08 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
php GUID生成函数和类
2014/03/10 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
event对象的方法 兼容多浏览器
2009/06/27 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
Python实现的科学计算器功能示例
2017/08/04 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
python方向键控制上下左右代码
2018/01/20 Python
Python iter()函数用法实例分析
2018/03/17 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
python 动态绘制爱心的示例
2020/09/27 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
2016年中学法制宣传日活动总结
2016/04/01 职场文书
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js
CentOS安装Nginx并部署vue
2022/04/12 Servers