图像的几何变换

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)—— 图像的几何变化相关推荐

  1. Java OpenCV 图像处理34 图形图像 分水岭 watershed

    Java OpenCV 图像处理34 图形图像 分水岭 watershed package com.xu.opencv;import org.opencv.core.Core; import org. ...

  2. Java OpenCV 图像处理04.0 图像形状与文字绘制

    Java OpenCV 图像处理04.0 图像形状与文字绘制 Github 代碼地址 OpenCV 仿射变换.透视变换.旋转.平移.缩放 序號 名稱 方法 1 圖像 添加文字 Imgproc.putT ...

  3. Java OpenCV 图像处理23.0 图像轮廓

    Java OpenCV 图像处理23.0 图像轮廓 Java OpenCV-4.0.0 图像轮廓 输入图像转为灰度图像cvtColor 使用Canny进行边缘提取,得到二值图像 使用findConto ...

  4. Python+OpenCV 图像处理系列(9)—— 图像的翻转和缩放插值

    1. 图像的翻转 图像翻转 (Image Flip),图像翻转的本质像素映射,OpenCV 支持三种图像翻转方式: X轴翻转,flipcode = 0 Y轴翻转, flipcode = 1 XY轴翻转 ...

  5. OpenCV图像处理(十二)---图像阈值化

    如果两个热力学系统中的每一个都与第三个热力学系统处于热平衡(温度相同),则它们彼此也必定处于热平衡.这一结论称做"热力学第零定律".又称热平衡定律,是热力学的四条基本定律之一,是一 ...

  6. Python+OpenCV 图像处理系列(8)—— Numpy 对象及图像对象创建与赋值

    1. Numpy 相关知识 1.1 Ndarray 对象 在了解 OpenCV 的图像对象之前我们先对 NumPy 的基础知识做一回顾,方便我们后续更进一步理解图像对象的一系列操作. In [2]: ...

  7. Python+OpenCV 图像处理系列(5)—— 图像 ROI 操作及通道的拆分合并

    1. 图像 ROI 有时你需要对一幅图像的特定区域进行操作.例如我们要检测一副图像中眼睛的位置,我们首先应该在图像中找到脸,再在脸的区域中找眼睛,而不是直接在一幅图像中搜索.这样会提高程序的准确性和性 ...

  8. Python+OpenCV 图像处理系列(4)—— 图像像素的读写、算术运算、逻辑运算及像素的统计

    1. 像素的读写 可以根据像素的行和列的坐标获取它的像素值.对 BGR 图像而言,返回值为 B,G,R 的值. img.shape 可以获取图像的形状.它的返回值是一个包含行数 h,列数 w,通道数 ...

  9. Python+OpenCV 图像处理系列(7)—— 图像色彩空间及转换

    1. 色彩空间转换函数 cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 第一个参数为加载在内存的读片,第二个参数为转换的类型,其中包括: COLOR_BGR2GRAY = ...

最新文章

  1. Happy New Year 2016
  2. React中级学习(第二天)
  3. Android之Content和activity、service、Application关系和attachBaseContext函数调用的时候
  4. 有问有答 | 精华问题汇总
  5. C++基础与深度解析第一章:C++初探笔记
  6. python爬虫(四)_urllib2库的基本使用
  7. JAVA反射性能约慢三个量级
  8. python爬虫百度文库源码_Python爬取百度文库学习
  9. 四川民办高校计算机专业排名2015,2015中国民办大学最佳专业排行榜10强
  10. 解决java中使用getImage()导入图片失败问题
  11. Linux系统中社保卡阅读
  12. 锂电池放空后充不进电_锂电池充不进去电怎么办(锂电池为什么小偷不要)
  13. 百度地图2.0离线版的制作
  14. 关键词生成原创文章及句子的软件!开发原理分析
  15. [Practical.Vim(2012.9)].Drew.Neil.Tip94 学习摘要
  16. python小程序抢购脚本怎么写_实战|抢购脚本编写
  17. 用户画像----对于标签的快速匹配
  18. Webpack 应用瘦身
  19. GEE:指数计算(NDVI、NBR、EVI、NDMI、NDSI、TC、NDFI、EBBI、VCI、BSI、NDBI)
  20. 互联网舆情监测系统的设计研究,TOOM舆情监测系统研究框架?

热门文章

  1. mysql查询字段大小写结果相同,mysql大小写查询不敏感,mysql5.7查询不区分大小写解决方案。
  2. 2022-2028年中国钢铁智能制造产业竞争现状及发展趋势分析报告
  3. 2021-2027年中国托育服务行业市场研究及前瞻分析报告
  4. Python 高级特性 (1)- 闭包
  5. LeetCode简单题之数组中第 K 个独一无二的字符串
  6. 使用Auto TensorCore CodeGen优化Matmul
  7. 算法编程Algos Programming
  8. 将人工智能模型压缩到微控制器中
  9. IDEA 报错红色下划线“cannot resolve”但仍能运行的解决方法
  10. Ubuntu系统执行shell 脚本的方法