【python-opencv】图像几何变换

编程之家收集整理的这篇文章主要介绍了【python-opencv】图像几何变换编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、变换

OpenCV提供了两个转换函数cv.warpAffinecv.warpPerspective,您可以使用它们进行各种转换。cv.warpAffine采用2x3转换矩阵,而cv.warpPerspective采用3x3转换矩阵作为输入。

import cv2 as cv
from google.colab.patches  cv2_imshow
image=cv.imread('变换.jpg')
# 得到图片的高和宽
height,width=image.shape[:2]
 定义对应的点
points1 = np.float32([[75,55],[340,[33,435],[400,433]])
points2 = np.float32([[0,0],[360,[0,420],420]])
 计算得到转换矩阵
M = cv.getPerspectiveTransform(points1,points2)
 实现透视变换转换
processed = cv.warpPerspective(image,M,(360,1)">))
cv2_imshow(processed)

结果:

参考:https://zhuanlan.zhihu.com/p/37023649

2、缩放

缩放只是调整图像的大小。为此,OpenCV带有一个函数cv.resize()。图像的大小可以手动指定,也可以指定缩放比例。也可使用不同的插值方法。首选的插值方法cv.INTER_AREA用于缩小,cv.INTER_CUBIC(慢)和cv.INTER_LINEAR用于缩放。默认情况下,出于所有调整大小的目的,使用的插值方法cv.INTER_LINEAR。您可以使用以下方法调整输入图像的大小

 numpy as np
 cv2 as cv
img = cv.imread(messi5.jpg)
res = cv.resize(img,None,fx=2,fy=2,interpolation = cv.INTER_CUBIC)
或者
height,width = img.shape[:2]
res = cv.resize(img,(2*width,2*height),interpolation = cv.INTER_CUBIC)

结果:

3、平移

平移是对象位置的转换。 如果你知道(x,y)方向的偏移,让它为(tx,ty),你可以创建变换矩阵M,如下所示:

可以将其设置为np.float32类型的Numpy数组,并将其传递给cv.warpAffine()函数.

 cv2
 numpy as np

img = cv2.imread(img.jpg,0)
rows,cols = img.shape

M = np.float32([[1,100],1,50]])
dst = cv2.warpAffine(img,(cols,rows))

cv2.imshow(imgdst

4、图像旋转

通过变换矩阵实现图像旋转角度θ:

OpenCV提供可调旋转,旋转中心可调,因此可以在任何的位置旋转.修正的变换矩阵由下式给出:

为了找到这个转换矩阵,OpenCV提供了一个函数cv2.getRotationMatrix2D.

img = cv.imread( img.shape
 cols-1 和 rows-1 是坐标限制
M = cv.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),90,1)
dst = cv.warpAffine(img,rows))

结果:

5、仿射变换

在仿射变换中,原始图像中的所有平行线在输出图像中仍将平行。为了找到变换矩阵,我们需要输入图像中的三个点及其在输出图像中的对应位置。然后cv.getAffineTransform将创建一个2x3矩阵,该矩阵将传递给cv.warpAffine

查看以下示例,并查看我选择的点(以绿色标记):

img = cv.imread(drawing.png)
rows,cols,ch = img.shape
pts1 = np.float32([[50,50],[200,[50,200]])
pts2 = np.float32([[10,[100,250]])
M = cv.getAffineTransform(pts1,pts2)
dst = cv.warpAffine(img,rows))
plt.subplot(121),plt.imshow(img),plt.title(Input)
plt.subplot(122),plt.imshow(dst),1)">Output')

结果:

6、透视变换

对于透视变换,您需要3x3变换矩阵。即使在转换后,直线也将保持直线。要找到此变换矩阵,您需要在输入图像上有4个点,在输出图像上需要相应的点。在这四个点中,其中三个不应共线。然后可以通过函数cv.getPerspectiveTransform找到变换矩阵。然后将cv.warpPerspective应用于此3x3转换矩阵。

请参见下面的代码

img = cv.imread(sudoku.png img.shape
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,[300,300],300 cv.getPerspectiveTransform(pts1,pts2)
dst = cv.warpPerspective(img,(300,1)">))
plt.subplot(121),1)">)
plt.show()

结果:

 

 

参考:

http://woshicver.com/FifthSection/4_2_%E5%9B%BE%E5%83%8F%E5%87%A0%E4%BD%95%E5%8F%98%E6%8D%A2/

 

总结

以上是编程之家为你收集整理的【python-opencv】图像几何变换全部内容,希望文章能够帮你解决【python-opencv】图像几何变换所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478

猜你在找的Python相关文章

Excel表操作 python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。 安装xlrd pip install xlrd 简单的表格读取
2019年7月3日早上,在百度AI开发者大会上,一个来自山西的青年,将一瓶矿泉水浇在了同样来自山西的李彦宏身上。 可以回顾一下 https://b23.tv/av57665929/p1 ,着实让人一惊
itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。 开源地址 https://github.com/littlecodersh/ItChat 文档: https://itc
Socket有一个缓冲区,缓冲区是一个流,先进先出,发送和取出的可自定义大小的,如果取出的数据未取完缓冲区,则可能存在数据怠慢。其中【recv(1024)】表示从缓冲区里取最大为1024个字节,但实际
ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。 本质上,它是一个简洁的key-value存储系统。 其主要用途有:动态数据库缓存、不同应用(语言)中共享数据 安装 安装及命令介绍
如果使用pymysql,则可以在view中直接import pymysql进行操作,与原操作无区别 Django数据库框架支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在s
使用原生SQL语句进行对数据库操作,可完成数据库表的建立和删除,及数据表内容的增删改查操作等。其可操作性很强,如可以直接使用“show databases”、“show tables”等语句进行表格之
类即是一个模型,根据模型建立起不同的对象,对象间拥有共同的一些属性 简单的类: 类变量和实例变量: 类变量: 类及所有实例共享变量,推荐使用方法是 【类名.变量名】 实例变量(self.变量名): 只
Python的进程和线程是使用的操作系统的原生线程和进程,其是去调用操作系统的相应接口实现 进程:之间不可直接共享数据,是资源的集合,进程必须有一个线程 线程:基于进程,之间可直接共享数据,可执行,只
页面跳转 页面跳转的url中必须在最后会自动添加【】,所以在urls.py的路由表中需要对应添加【】 本地跳转需要参考urls.py的路由表 Cookie 设置cookie 获取cookie 删除
存储系统数据缓存一般会使用三个模块:Mongodb,redis,memcache。其中memcache是轻量级缓存,只能将数据保存到内存中,redis可以配置数据保存在内存还是硬盘。 其主要用途有:不