opencv中cv2.warpAffine 和 cv2.warpPerspective的广泛应用
大家不要再理解错了!warpPerspective和warpAffine 不仅仅只有透视变换一个作用。
上一次做理论题时,搜索warpPerspective,结果给我弹出来一个透视变换,如下:
当时的我以为warpPerspective是一个专门做透视变换的函数,结果却不是这样的。
OpenCV 提供了两个变换函数, cv2.warpAffine 和 cv2.warpPerspective, 使用这两个函数你可以实现所有类型的变换。 cv2.warpAffine 接收的参数是 2 × 3 的变换矩阵,而 cv2.warpPerspective 接收的参数是 3 × 3 的变换矩阵。
下面给大家演示:
#这是不调用函数时,平移图像的例子 import cv2 as cv import matplotlib.pyplot as plt import numpy as np import math#平移变换自己实现 Simg=cv.imread("D:\woman1.tif",0) dimg=np.zeros(Simg.shape[:2],np.uint8) height=Simg.shape[0] width=Simg.shape[1] tx=50;ty=100 #右下角平移 for row in range(height-ty):for col in range(width-tx):dimg[row+ty,col+tx]=Simg[row,col] cv.imshow("sourceImage",Simg) cv.imshow("destImage",dimg) cv.waitKey(0)
那么调用函数,我们应该怎么用呢?
#调用函数平移
#函数 cv2.warpAffine() 的第三个参数的是输出图像的大小,它的格式应该是图像的(宽,高)
#应该记住的是图像的宽对应的是列数,高对应的是行数tx=50;ty=100 #右下角平移
affine_arr = np.float32([[1,0,tx],[0,1,ty],[0,0,1]])
res = cv.warpPerspective(Simg,affine_arr,(width,height))
cv.imshow("desttIMage",res)
cv.waitKey(0)
结果和上面一致。
除了平移外,我们还可以应用到很多场景。例如旋转,镜像,放缩等。
#放射变换 src 3 -> dst 3 (左上角, 左下角,右上角) 找三个点的坐标 matSrc = np.float32([[0,0],[0,height-1],[width-1, 0]]) # 需要注意的是 行列 和 坐标 是不一致的 matDst = np.float32([[50,50],[100, height-50],[width-100,50]]) matAffine = cv.getAffineTransform(matSrc,matDst) #mat 1 src 2 dst 形成组合矩阵 dst1 = cv.warpAffine(Simg, matAffine,(width, height)) cv.imshow('image',dst1) cv.waitKey(0)
#旋转 绕图像中心点旋转,还需重算矩阵matrix import math angle=180#旋转角度 matrix=np.float32([[math.cos(angle),math.sin(angle),0],[-math.sin(angle),math.cos(angle),0]]) ret11=cv.warpAffine(Simg,matrix,(width,height)) cv.imshow("destIMage",ret11) cv.waitKey(0)
放射变换如上。
opencv中cv2.warpAffine 和 cv2.warpPerspective的广泛应用相关推荐
- opencv函数cv2.warpAffine 和 cv2.warpPerspective 的理解和复现
文章目录 opencv函数cv2.warpAffine 和 cv2.warpPerspective 的理解和复现 1. warpAffine 函数处理仿射变换 2. warp_perspective ...
- Python,OpenCV中的图像修复——cv2.inpaint()
Python,OpenCV中的图像修复--cv2.inpaint 1. 效果图 2. 原理 3. 源码 参考 image inpainting 图像修改 这篇博客将介绍如何通过OpenCV中图像修复的 ...
- cv2.warpAffine和cv2.warpPerspective
Opencv仿射变换(Affine Transformation)函数:cv2.warpAffine Affine Transformation:可实现旋转,平移,缩放,变换后的平行线依旧平行. Op ...
- python的cv2.warpAffine()和cv2.warpPerspective()解析对比
1.cv2.warpAffine()放射变换函数,可实现旋转,平移,缩放:变换后的平行线依旧平行 cv2.warpAffine(src, M, dsize, dst=None, flags=None, ...
- OpenCV 中的 warpAffine
warpAffine 是图像处理中比较常见的一种变换,可以将图像校正或对齐. 对于线性插值方式,OpenCV 首先将坐标映射保存成两张图,然后调用 remap 函数.第二步是比较耗时的部分,并且 wa ...
- 在OpenCV中使用单应性进行姿势估计
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 什么是单应性 单应性是一种平面关系,可将点从一个平面转换为另一个平 ...
- 【CV面试】RGB2GRAY、贝叶斯问题、cv2.add和cv2.addWeighted
目录 1.opencv中RGB2GRAY是怎么实现的 2.贝叶斯问题 3.cv2.add和cv2.addWeighted 1.opencv中RGB2GRAY是怎么实现的 答:以R.G.B为轴建立空间直 ...
- opencv和pytorch中的warp操作函数:cv2.warpAffine, torch.nn.functional.grid_sample, cv2.warpPerspective
关于图像的warp操作是指利用一个旋转缩放矩阵对图像进行操作. 常见的操作有,平移,绕某个点旋转,缩放. opencv中有getRotationMatrix2D,warpAffine, getAffi ...
- opencv图像仿射变换,cv2.warpAffine
目录 仿射变换原理介绍 cv2.warpAffine函数介绍 代码实例 仿射变换原理介绍 仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间. 在有 ...
最新文章
- docker load 出错 open /var/lib/docker/tmp/docker-import-837327978/bin/json: no such file or directory
- Java线程池面试必备:核心参数、工作流、监控、调优手段
- pandas使用groupby函数按照多个分组变量进行分组聚合统计、使用agg函数计算分组的多个统计指标(grouping by multiple columns in dataframe)
- python提供的默认的构造方法是什么_Python面试常见问题,__init__是构造函数吗?...
- oracle批量插入并且返回自增主键_oracle 自增主键实现批量更新和增加sql
- ROS系统中的多个版本Boost问题
- ASP.NET创建文件并写入内容
- 若依前后端部署之后验证码不显示
- 数据结构-树的基础代码
- c++学习笔记--C++Primer第4版--标准库类型string
- MATLAB中空间滤波卷积有什么作用
- 【luogu P2939 [USACO09FEB]改造路Revamping Trails】 题解
- The King’s Problem 强连通
- html5 Ajax 访问.net WebApi获取视频流
- 计算机网络(二)—— 物理层(1、2、3):物理层的基本概念、物理层的下面的传输媒体、传输方式
- access vba代码大全_VBA编程在翻译中的应用
- windows10强制删除文件_Windows10 初装必设置
- 【AI视野·今日NLP 自然语言处理论文速览 第十七期】Thu, 1 Jul 2021
- ArrayList和Linked的区别
- 【4】Git查看版本库当前状态