OpenCV 图像处理系列(6)—— 图像的几何变化
图像的几何变换
OpenCV 提供了两个变换函数,cv2.warpAffine 和 cv2.warpPerspective,使用这两个函数你可以实现所有类型的变换。cv2.warpAffine 接收的参数是 2 x 3 的变换矩阵,而 cv2.warpPerspective 接收的参数是 3 x 3 的变换矩阵。
1. 扩展缩放
扩展缩放只是改变图像的尺寸大小。OpenCV 提供的函数 cv2.resize() 可以实现这个功能。
resize(src, dst, interpolation=CV_INTER_LINEAR)
图像的尺寸可以自己手动设置,你也可以指定缩放因子。我们可以选择使用不同的插值方法。
在缩放时我们推荐使用 cv2.INTER_AREA,在扩展时我们推荐使用 v2.INTER_CUBIC(慢) 和 v2.INTER_LINEAR。
默认情况下所有改变图像尺寸大小的操作使用的插值方法都是 cv2.INTER_LINEAR。你可以使用下面任意一种方法改变图像的尺寸:
import cv2img = cv2.imread('113_2018-11-28_16-30-49.jpg')
'''
下面的None 本应该是输出图像的尺寸,但是因为后边我们设置了缩放因子,因此这里为None
resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)
'''
res = cv2.resize(img, dsize=None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)'''
或者
这里,我们直接设置输出图像的尺寸,所以不用设置缩放因子
'''
height, width = img.shape[:2]
img = cv2.resize(img, dsize=(width//3, height//3), interpolation=cv2.INTER_CUBIC)# cv2.imshow('res', res)
cv2.imshow('img', img)
if cv2.waitKey(0) & 0xFF == 27:cv2.destroyAllWindows()
2. 平移
你可以使用 Numpy 数组构建这个矩阵(数据类型是np.float32),然后把它传给函数 cv2.warpAffine()。
import cv2
import numpy as npimg = cv2.imread('113_2018-11-28_16-30-49.jpg', 0)
rows, cols = img.shapeM = np.float32([[1, 0, 100], [0, 1, 50]])
dst = cv2.warpAffine(img, M, (cols//2, rows//2))cv2.imshow('img', img)
cv2.imshow('dst', dst)
if cv2.waitKey(0) & 0xFF == 27:cv2.destroyAllWindows()
警告:函数 cv2.warpAffine() 的第三个参数的是输出图像的大小,它的格式应该是图像的(宽,高)。应该记住的是图像的宽对应的是列数,高对应的是行数。
3. 旋转
OpenCV 提供了一个函数:cv2.getRotationMatrix2D 下面的例子是在不缩放的情况下将图像旋转90 度。
import cv2img = cv2.imread('113_2018-11-28_16-30-49.jpg', 0)
rows, cols = img.shape
'''
# 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
# 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
'''
M = cv2.getRotationMatrix2D(center=(cols/2, rows/2), angle=45, scale=0.6)
'''
# 第三个参数是输出图像的尺寸中心
# warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)
'''
dst = cv2.warpAffine(src=img, M=M, dsize=(cols//2, rows//2))cv2.imshow('img', dst)
if cv2.waitKey(0) & 0xFF == 27:cv2.destroyAllWindows()
4. 仿射变化
5. 透视变化
OpenCV 图像处理系列(6)—— 图像的几何变化相关推荐
- Java OpenCV 图像处理34 图形图像 分水岭 watershed
Java OpenCV 图像处理34 图形图像 分水岭 watershed package com.xu.opencv;import org.opencv.core.Core; import org. ...
- Java OpenCV 图像处理04.0 图像形状与文字绘制
Java OpenCV 图像处理04.0 图像形状与文字绘制 Github 代碼地址 OpenCV 仿射变换.透视变换.旋转.平移.缩放 序號 名稱 方法 1 圖像 添加文字 Imgproc.putT ...
- Java OpenCV 图像处理23.0 图像轮廓
Java OpenCV 图像处理23.0 图像轮廓 Java OpenCV-4.0.0 图像轮廓 输入图像转为灰度图像cvtColor 使用Canny进行边缘提取,得到二值图像 使用findConto ...
- Python+OpenCV 图像处理系列(9)—— 图像的翻转和缩放插值
1. 图像的翻转 图像翻转 (Image Flip),图像翻转的本质像素映射,OpenCV 支持三种图像翻转方式: X轴翻转,flipcode = 0 Y轴翻转, flipcode = 1 XY轴翻转 ...
- OpenCV图像处理(十二)---图像阈值化
如果两个热力学系统中的每一个都与第三个热力学系统处于热平衡(温度相同),则它们彼此也必定处于热平衡.这一结论称做"热力学第零定律".又称热平衡定律,是热力学的四条基本定律之一,是一 ...
- Python+OpenCV 图像处理系列(8)—— Numpy 对象及图像对象创建与赋值
1. Numpy 相关知识 1.1 Ndarray 对象 在了解 OpenCV 的图像对象之前我们先对 NumPy 的基础知识做一回顾,方便我们后续更进一步理解图像对象的一系列操作. In [2]: ...
- Python+OpenCV 图像处理系列(5)—— 图像 ROI 操作及通道的拆分合并
1. 图像 ROI 有时你需要对一幅图像的特定区域进行操作.例如我们要检测一副图像中眼睛的位置,我们首先应该在图像中找到脸,再在脸的区域中找眼睛,而不是直接在一幅图像中搜索.这样会提高程序的准确性和性 ...
- Python+OpenCV 图像处理系列(4)—— 图像像素的读写、算术运算、逻辑运算及像素的统计
1. 像素的读写 可以根据像素的行和列的坐标获取它的像素值.对 BGR 图像而言,返回值为 B,G,R 的值. img.shape 可以获取图像的形状.它的返回值是一个包含行数 h,列数 w,通道数 ...
- Python+OpenCV 图像处理系列(7)—— 图像色彩空间及转换
1. 色彩空间转换函数 cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 第一个参数为加载在内存的读片,第二个参数为转换的类型,其中包括: COLOR_BGR2GRAY = ...
最新文章
- Happy New Year 2016
- React中级学习(第二天)
- Android之Content和activity、service、Application关系和attachBaseContext函数调用的时候
- 有问有答 | 精华问题汇总
- C++基础与深度解析第一章:C++初探笔记
- python爬虫(四)_urllib2库的基本使用
- JAVA反射性能约慢三个量级
- python爬虫百度文库源码_Python爬取百度文库学习
- 四川民办高校计算机专业排名2015,2015中国民办大学最佳专业排行榜10强
- 解决java中使用getImage()导入图片失败问题
- Linux系统中社保卡阅读
- 锂电池放空后充不进电_锂电池充不进去电怎么办(锂电池为什么小偷不要)
- 百度地图2.0离线版的制作
- 关键词生成原创文章及句子的软件!开发原理分析
- [Practical.Vim(2012.9)].Drew.Neil.Tip94 学习摘要
- python小程序抢购脚本怎么写_实战|抢购脚本编写
- 用户画像----对于标签的快速匹配
- Webpack 应用瘦身
- GEE:指数计算(NDVI、NBR、EVI、NDMI、NDSI、TC、NDFI、EBBI、VCI、BSI、NDBI)
- 互联网舆情监测系统的设计研究,TOOM舆情监测系统研究框架?
热门文章
- mysql查询字段大小写结果相同,mysql大小写查询不敏感,mysql5.7查询不区分大小写解决方案。
- 2022-2028年中国钢铁智能制造产业竞争现状及发展趋势分析报告
- 2021-2027年中国托育服务行业市场研究及前瞻分析报告
- Python 高级特性 (1)- 闭包
- LeetCode简单题之数组中第 K 个独一无二的字符串
- 使用Auto TensorCore CodeGen优化Matmul
- 算法编程Algos Programming
- 将人工智能模型压缩到微控制器中
- IDEA 报错红色下划线“cannot resolve”但仍能运行的解决方法
- Ubuntu系统执行shell 脚本的方法