OpenCV3计算机视觉Python语言实现笔记(五)

图像的几何变换主要包括:平移、扩大与缩小、旋转、仿射、透视等等。图像变换是建立在矩阵运算基础上的,通过矩阵运算可以很快的找到对应关系。

1. 图像的平移

  图像的平移,沿着x方向tx距离,y方向ty距离,需要构造移动矩阵M。通过numpy来产生这个矩阵,并将其赋值给仿射函数cv2.warpAffine(). 
仿射函数cv2.warpAffine()接受三个参数,需要变换的原始图像,移动矩阵M 以及变换的图像大小(这个大小如果不和原始图像大小相同,那么函数会自动通过插值来调整像素间的关系)。

复制代码

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('flower.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()

复制代码

2. 图像的缩放

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

复制代码

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('flower.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()

复制代码

3. 图像的旋转

  图像旋转需构造旋转矩阵。opencv提供了一个函数: cv2.getRotationMatrix2D(),这个函数需要三个参数,旋转中心,旋转角度,旋转后图像的缩放比例。

复制代码

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('flower.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()

复制代码

4. 图像的仿射

  图像的旋转加上拉升就是图像仿射变换,仿射变化也需要一个变换矩阵M,opencv提供了根据变换前后三个点的对应关系来自动求解M。这个函数是 
M=cv2.getAffineTransform(pos1,pos2),其中两个位置就是变换前后的对应位置关系,输出的就是仿射矩阵M,然后再使用函数cv2.warpAffine()。

复制代码

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('flower.jpg')
rows,cols = img.shape[:2]
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])
M = cv2.getAffineTransform(pts1,pts2)
#第三个参数:变换后的图像大小
res = cv2.warpAffine(img,M,(rows,cols))
plt.subplot(121)
plt.imshow(img)
plt.subplot(122)
plt.imshow(res)
plt.show()

复制代码

5. 图像的透射

  透视需要的是一个3*3的矩阵,opencv的函数是M = cv2.getPerspectiveTransform(pts1,pts2),其中pts需要变换前后的4个点对应位置。得到M后再通过函数cv2.warpPerspective(img,M,(200,200))进行。

复制代码

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('flower.jpg')
rows,cols = img.shape[:2]
pts1 = np.float32([[56,65],[238,52],[28,237],[239,240]])
pts2 = np.float32([[0,0],[200,0],[0,200],[200,200]])
M = cv2.getPerspectiveTransform(pts1,pts2)
res = cv2.warpPerspective(img,M,(200,200))
plt.subplot(121)
plt.imshow(img)
plt.subplot(122)
plt.imshow(res)
plt.show()

复制代码

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenCV 3计算机视觉 Python语言实现(第二版)(含示例代码) 编辑推荐 OpenCV 3是一种*先进的计算机视觉库,它提供了很多图像和视频处理操作,以及一些代表计算机视觉未来发展方向的功能,如人脸识别或目标跟踪。学习计算机视觉算法、模型和OpenCV API的基本概念之后,可以开发各种现实生活中的应用程序(如安全和监控方面的应用程序)。 本书从图像处理的基本操作出发,带你开启先进计算机视觉的探索之旅。计算机视觉是一个快速发展的学科,与其相关的现实应用也呈爆炸性增长,本书的目的就是帮助计算机视觉领域的新手和想要了解全新的OpenCV 3.0.0的计算机视觉专家快速掌握基于PythonOpenCV计算机视觉开发的实用方法、技巧和*佳实践。 通过阅读本书,你将学到:   安装和熟练使用基于PythonOpenCV 3的API   掌握图像处理和视频分析的基础知识   在图像和视频中检测和识别目标   使用OpenCV检测和识别人脸   训练和使用自己的对象分类器   了解计算机视觉中的机器学习概念   使用OpenCV的人工神经网络来解决实际问题   开发现实生活中的计算机视觉应用 内容简介 OpenCV是开源、跨平台的计算机视觉库,由英特 尔公司发起并参与开发,在商业和研究领域中可以免费使用。本书介绍了如何通过Python来开发基于OpenCV 3.0的应用。作为当前非常流行的动态语言之一,Python不仅使用非常简单,而且功能强大。通过Python来学习OpenCV框架,可以让你很快理解计算机视觉的基本概念以及重要算法。 本书分8章来介绍计算机视觉的重要概念,所有的概念都融入了一些很有趣的项目。本书首先详细介绍了多个平台下基于PythonOpenCV安装,继而介绍了计算机视觉应用的基本操作,包括图像文件的读取与显示,图像处理的基本操作(比如边缘检测等),深度估计与分割,人脸检测与识别,图像的检索,目标的检测与识别,目标跟踪,神经网络的手写体识别。可以这样说,本书是一本不可多得的采用OpenCV实践计算机视觉应用的好书。
### 回答1: Anaconda是一个用于科学计算的Python发行版,它包含了许多常用的科学计算库和工具。Anaconda的目标是简化Python环境的安装和管理,使科学家和数据分析师能够更轻松地使用Python进行科学计算和数据分析。 Jupyter是一个交互式的计算环境,它可以让开发者以笔记本形式进行编程和数据探索。通过Jupyter,我们可以编写和运行Python代码、展示数据可视化、撰写文档等。Jupyter的灵活性和可视化功能使其成为数据科学和机器学习领域非常受欢迎的工具。 OpenCV是一个用于计算机视觉和图像处理的开源库。它提供了大量的图像处理和计算机视觉算法,可以用于图像分析、特征提取、图像识别等领域。OpenCV支持多种编程语言,包括Python,通过使用OpenCV可以方便地进行图像处理和计算机视觉任务。 综合起来,Anaconda提供了Python的科学计算环境,而Jupyter则为我们提供了一个交互式的计算环境,而OpenCV为我们提供了图像处理和计算机视觉的算法库。通过使用Anaconda可以方便地管理和安装相关库和工具,而使用Jupyter可以方便地进行代码编写和数据可视化,而使用OpenCV可以方便地进行图像处理和计算机视觉任务。这三者的结合,为我们提供了强大的科学计算和图像处理的工具链。 ### 回答2: Anaconda是一个开源的Python发行版本,它包含了许多用于科学计算和数据分析的库和工具。Anaconda提供了一个可视化的环境管理器,可以用来安装和管理Python包和依赖。 Jupyter是一个基于Web的交互式计算环境,它支持多种编程语言,其中包括Python。Jupyter提供了一个Notebook界面,可以将代码、文档和可视化内容结合在一起,并且可以通过浏览器进行访问和共享。 OpenCV是一个开源的计算机视觉库,它提供了许多用于图像处理和计算机视觉任务的函数和工具。OpenCV可以用于图像获取、处理、分析、以及对象识别和跟踪等任务。它支持多种编程语言,包括Python。 Anaconda、Jupyter和OpenCV在科学计算和数据分析领域都有广泛的应用。通过使用Anaconda,可以方便地安装和管理OpenCV等库。而借助Jupyter的交互式计算环境,可以更加高效地进行图像处理和计算机视觉任务的开发和调试。同时,可以通过Jupyter的Notebook界面,将代码和结果以及注释和说明结合在一起,便于代码的分享和复用。 综上所述,Anaconda、Jupyter和OpenCV是三个在科学计算和数据分析领域非常有用的工具和库,它们可以一起使用,相互补充,提高开发效率和代码可读性。 ### 回答3: Anaconda是一个流行的Python数据科学平台,它集成了许多常用的数据科学库和工具。Anaconda包括一个包管理系统,使得安装和管理各种包变得更加简便。通过Anaconda,用户可以轻松地搭建自己的Python环境,并方便地管理所需的包。 Jupyter是一个开源的Web应用程序,它提供了一个交互式的计算环境,支持多种编程语言。Jupyter的主要特点是它以“笔记本”的形式组织代码、文本和图形输出。用户可以在笔记本中编写代码,并实时查看代码运行的结果。Jupyter非常适用于展示和分享数据分析、机器学习和数据可视化的工作。 OpenCV是一个开源的计算机视觉库,它提供了很多用于处理图像和视频的函数和算法。OpenCV广泛应用于计算机视觉、图像处理、视频分析等领域。通过OpenCV可以进行图像的读取、处理、计算机视觉任务的实现等。它支持多种编程语言,包括Python。 Anaconda, Jupyter和OpenCV之间的关系是,Anaconda提供了一个方便的平台搭建环境,允许用户安装和管理OpenCV等数据科学包。用户可以使用Jupyter作为Anaconda提供的一种交互式环境来编写代码、展示和分享数据处理、机器学习和计算机视觉的工作。通过Anaconda的包管理系统,用户可以轻松地安装和配置OpenCV,并且可以轻松地分享和共享使用Jupyter编写的数据处理和计算机视觉代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值