python 几何教学_opencv-python教程学习系列11-几何变换

前言

opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍几何变换,坚持学习,共同进步。

系统环境

系统:win7_x64;

python版本:python3.5.2;

opencv版本:opencv3.3.1;

内容安排

1.知识点介绍;

2.测试代码;

具体内容

1.知识点介绍;

主要涉及函数cv2.getPerspectiveTransform,cv2.warpAffine和cv2.warpPersperctive;

1.1 缩放;

缩放仅仅改变图像尺寸,opencv提供的函数cv2.resize()可以实现此功能。图片的尺寸可以指定尺寸大小,或者指定缩放因子。可以使用不同的插值运算方法,在缩放时推荐的插值运算方法是 cv2.INTER_AREA,在扩展时推荐使用v2.INTER_CUBIC(慢)和cv2.INTER_LINEAR。默认情况下改变图像大小的操作使用插值方法是cv2.INTER_LINEAR,可以使用任意一种方法改变图像尺寸。

##None为图像尺寸时,fx和fy参数是缩放因子

res = cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)

#or

#这里直接设置输出图像的尺寸,所以不用设置缩放因子

height, width =img.shape[:2]

res = cv2.resize(img,(2*width, 2*height),interpolation=cv2.INTER_CUBIC)

#注意,integer argument expected;那怎么缩小呢??

1.2 平移;

平移就是移动对象位置。如果你知道移动方向(x,y),移动距离是(tx,ty),可以创建如下矩阵。

可以使用Numpy数组构建矩阵,数据类型是np.float32,然后将其传入函数cv2.warpAffine();

函数cv2.warpAffine() 第三个参数是输出图像的大小,格式是图像的(宽,高)。

注意,图像的宽对应的是列数,高对应的是行数。

M = np.float32([[1,0,100], [0,1,50]])

dst = cv2.warpAffine(img, M, (cols,rows))

1.3 旋转;

对一个图像旋转角度θ,旋转矩阵如下:

在opencv中允许在任意地方进行旋转,旋转矩阵如下:

其中,

opencv提供了cv2.getRotationMatrix2D函数来实现旋转矩阵;

M=cv2.getRotationMatrix2D((cols/2,rows/2), 45, 0.6)

#第三个参数是输出图像的尺寸中心

dst=cv2.warpAffine(img, M, (2*cols,2*rows))

1.4 仿射变换;

仿射变换中,原图中的平行线变换后依然平行。创建仿射变换矩阵需要在图像中找三个点和这三个点在输出图像的位置。使用cv2.getAffineTransform函数创建2*3的仿射变换矩阵,矩阵会被传递给cv2.warpAffine函数;

pts1 = np.float32([[50,50],[200,50],[50,200]])

pts2 = np.float32([[10,100],[200,50],[100,250]])

#行,列,通道数

M = cv2.getAffineTransform(pts1, pts2)

dst = cv2.warpAffine(img, M, (cols,rows))

1.5 透视变换;

透视变换需要3*3的矩阵,透视变换后直线还是直线,建立透视矩阵需要在图像上找4个点,以及他们在输出图像上的对应位置,这四个点任意三个不能共线。由cv2.getPerspectiveTransform() 构建矩阵,然后将矩阵传递给cv2.warpPerspective函数;

pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])

pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])

M = cv2.getPerspectiveTransform(pts1, pts2)

dst = cv2.warpPerspective(img, M, (300,300))

2.测试代码;

2.1 缩放/旋转等;

import cv2

img = cv2.imread('test.jpg',0)

rows,cols=img.shape

#这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子

#可以通过设置旋转中心,缩放因子以及窗口大小来防止旋转后超出边界的问题。

M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6)

#第三个参数是输出图像的尺寸中心

dst=cv2.warpAffine(img,M,(2*cols,2*rows))

while(1):

cv2.imshow('img',dst)

if cv2.waitKey(1)==27:

break

cv2.destroyAllWindows()

2.2 仿射/透视变换;

import cv2

import numpy as np

from matplotlib import pyplot as plt

img=cv2.imread('test.jpg')

rows,cols,ch=img.shape

pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])

pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])

M = cv2.getPerspectiveTransform(pts1, pts2)

dst = cv2.warpPerspective(img, M, (300,300))

plt.subplot(121), plt.imshow(img), plt.title('Input')

plt.subplot(122), plt.imshow(dst), plt.title('output')

plt.show()

参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数学+编程】对数学函数进行抽象

目的 将数学函数抽象为类。 类名 函数 属性 基本属性 表达式定义域值域周期性、单调性等特性 方法 求值:返回值平移:返回新的函数伸缩:返回新的函数反转:返回新的函数复合:参数为另外一个函数,返回…

2020-12-19

逆变(contravariant)与协变(covariant)是C#4新增的概念,许多书籍和博客都有讲解,我觉得都没有把它们讲清楚,搞明白了它们,可以更准确地去定义泛型委托和接口,这里我尝试画…

【数学】定积分和不定积分的区别

不定积分的研究对象是某函数下的映射关系积分后,得到怎样的新的映射关系。 定积分的研究对象是积分的值。

微软模拟飞行10厦门航空涂装_《微软飞行模拟器》多人游戏模式演示:可组队飞行...

IT之家3月29日消息 《微软飞行模拟器》(Flight Simulator)是2020年最受期待的游戏之一,开发商Asobo Studio现在分享了一段新的视频,详细介绍了《微软飞行模拟器》的多人游戏模式。《微软飞行模拟器》游戏的主模式将看到所有玩家在同一个世界中一起玩。微…

【信号与系统】系统特性

系统 系统就是一个包含f(t)、y(t)及其衍生函数(如导数,复合函数)的方程。 所以在你看到一个方程的时候,第一反应是: 方程描述了一个系统,在时刻t,可以把f(t)变成y(t)。如何变的呢?由…

【转】UDP协议格式以及在java中的使用

UDP协议格式以及在java中的使用 UDP是面向无连接的通讯协议,由于通讯不需要连接,所以可以实现广播发送。UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。 UDP适用于…

python网页填表教程_PythonSpot 中文系列教程 · 翻译完成

原文:PythonSpot Python Tutorials 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。在线阅读ApacheCN 学习资源目录PythonSpot 中文系列教程初学者 介绍Python 字符串字符串&#xff0…

Qt生成的exe中为什么会带有不该有的盾牌?

参考 为什么EXE文件出现了不该出现的“盾牌”什么情况下 exe 会自动加上 UAC 的盾标?

【转】TCP/IP协议到底在讲什么?【乐搏TestPro】

用比喻和漫画给有需要的小伙伴解释下IP、TCP捎带题一下各种协议与HTTP协议的关系; 目录: 负责传输的IP协议 确保可靠性的TCP协议 各种协议与HTTP协议的关系 一、负责传输的IP协议 按照层次分,IP(全称:Internet Prot…

python文本去重函数_python3.4.3下逐行读入txt文本并去重的方法

读写文件时应注意的问题包括:1.字符编码2.操作完成即时关闭文件描述符3.代码兼容性几种方法:#!/bin/python3original_list1[" "]original_list2[" "]original_list3[" "]original_list4[" "]newlist1[" &q…

Qt中标绘功能的实现方法对比

使用Qt开发桌面程序,经常会有标绘的需求,一般有以下几点: 新建:圆、矩形、椭圆、文字标注,插入图像等;编辑:指对已标绘内容的属性编辑修改功能;删除:指对已标绘内容的删…

【转】PE文件结构详解--(完整版)

(一)基本概念 PE(Portable Execute)文件是Windows下可执行文件的总称,常见的有DLL,EXE,OCX,SYS等,事实上,一个文件是否是PE文件与其扩展名无关,P…

sap 订单状态修改时间_SAP中对于获取订单的状态

在SAP中对于如何获取订单的状态,提供了至少两个函数,分别是 STATUS_READ 和 STATUS_TEXT_EDIT。下面简单介绍这两个函数1.STATUS_READ 改函数的实现原理大概是通过订单的对象好(OR订单号) 到JEST中取出字段STAT INACT.JEST表中STAT是一串从字面看不出…

【转】%~dp0是什么意思

转载自 www.cnblogs.com/yxsylyh 转载内容如下: cd /D %~dp0的意思如下: 更改当前目录为批处理本身的目录 比如你有个批处理a.bat在D:\qq文件夹下 a.bat内容为 cd /d %~dp0 在这里 cd /d %~dp0的意思就是cd /d d:\qq %0代表批处理本身 d:\qq\a.b…

AutoCode For XML(XML解析代码生成器)发布

项目地址 AutoCode For XML on Gitee bug反馈、意见建议 bug反馈、意见建议请直接在此项目主页上进行! 版本更新 AutoCode For XML v1.0.0发布啦! 第一个发行版本,主要用于测试。 下载地址:点我 本工具由Qt未来工程师原创发布。…

wince投屏苹果手机_怎么把手机上的导航映射到中控屏

展开全部第一种:通过MHL线进行手机屏幕和车载屏幕连62616964757a686964616fe78988e69d8331333431353366接实现这种连接方式,必须满足三个条件:一是手机需要支持MHL功能,目前大多数安卓智能手机均具备这一功能;二是车上…

【转】逆变与协变详解

逆变(contravariant)与协变(covariant)是C#4新增的概念,许多书籍和博客都有讲解,我觉得都没有把它们讲清楚,搞明白了它们,可以更准确地去定义泛型委托和接口,这里我尝试画…

设计模式(二)设计模式的本质

简介 设计模式是计算机前辈们,总结项目开发成败经验,得出的一套最佳实践理论。它并不是高高在上、不切实际的理论,而是具体到代码编写层面的指导理论。 从学习编写代码开始,我们就被教导,要写高内聚、低耦合、可复用…

angular设置referer_Angular-cli 构建应用的一些配置

Angular-cli 构建应用的一些配置标签(空格分隔): Angular直接使用 ng build --prod --build-optimizer --base-href/ 来发布base-href可以设置服务器上的某个子路径,使用 ng build --base-href/my/path/如果打包静态文件(js和css)不放在和index.html同一…

设计模式(三)创建型模式

前言 根据菜鸟教程的目录,我们首先来看看创建型模式。 创建型模式研究: 实际应用中通常有哪些不同的创建对象的场景;在不同的场景下,如何更好地编写创建对象的代码。主要研究构造函数。 下面分别对创建型模式下的各种具体模式进…