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写的创建文件夹自定义函数mkdir()
Aug 25 Python
Python中装饰器的一个妙用
Feb 08 Python
详解Python程序与服务器连接的WSGI接口
Apr 29 Python
Python表示矩阵的方法分析
May 26 Python
Python探索之SocketServer详解
Oct 28 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
python 生成图形验证码的方法示例
Nov 11 Python
django 实现celery动态设置周期任务执行时间
Nov 19 Python
python读取mysql数据绘制条形图
Mar 25 Python
python 深度学习中的4种激活函数
Sep 18 Python
python爬虫之selenium库的安装及使用教程
May 23 Python
如何Python使用re模块实现okenizer
Apr 30 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学习笔记(毕业设计)
2012/02/21 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
分享一款基于jQuery的视频播放插件
2014/10/09 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
layui表格实现代码
2017/05/20 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
Vuex中的State使用介绍
2019/01/19 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
编程语言Python的发展史
2014/09/26 Python
python+opencv实现动态物体识别
2018/01/09 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
django的autoreload机制实现
2020/06/03 Python
HTML5 解析规则分析
2009/08/14 HTML / CSS
Lucene推荐的分页方式是什么?
2015/12/07 面试题
物业管理公司实习生自我鉴定
2013/09/19 职场文书
大学毕业生通用求职信
2013/09/28 职场文书
室内拓展活动方案
2014/02/13 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015年推普周活动方案
2015/05/06 职场文书