python图像仿射变换(详解Python计算机视觉 图像扭曲仿射扭曲)
python图像仿射变换
详解Python计算机视觉 图像扭曲仿射扭曲对图像块应用仿射变换,我们将其称为图像扭曲(或者仿射扭曲)。该操作不仅经常应用在计算机图形学中,而且经常出现在计算机视觉算法中。
一、仿射变换原理
仿射变换能够保持图像的“平直性”,包括旋转,缩放,平移,错切操作。对于三个点,仿射变换可以将一副图像进行扭曲,使得三对对应点对可以完美地匹配上。仿射变换具有6个自由度,有三个对应点对可以给出6个约束条件(对于这三个对应点对,x和y坐标必须都要匹配)
仿射变换是在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射。由一个非奇异的线性变换(运用一次函数进行的变换)接上一个平移变换组成。在有限维的情况,每个仿射变换可以由一个矩阵a和一个向量b给出,它可以写作a和一个附加的列b。一个仿射变换对应于一个矩阵和一个向量的乘法,而仿射变换的复合对应于普通的矩阵乘法,只要加入一个额外的行到矩阵的底下,这一行全部是0除了最右边是一个1,而列向量的底下要加上一个1。
二、图像中的图像
仿射扭曲简单的一个例子是,将图像或者图像的一部分放置在另一幅图像中,使得它们能够和指定的区域或者标记物对齐。
以下是代码:
|
from pcv.geometry import warp, homography from pil import image from pylab import * from scipy import ndimage # 仿射扭曲im1到im2的例子 im1 = array(image. open ( 'jida.jpg" alt="python图像仿射变换(详解Python计算机视觉 图像扭曲仿射扭曲)" border="0" /> im2 = array(image. open ( 'beijing.jpg" alt="python图像仿射变换(详解Python计算机视觉 图像扭曲仿射扭曲)" border="0" /> # 选定一些目标点 tp = array([[ 420 , 830 , 830 , 420 ],[ 400 , 350 , 1060 , 1000 ],[ 1 , 1 , 1 , 1 ]]) #标记物的坐标tp是用齐次坐标意义下的坐标表示的 #array为 第一张图片贴到第二张图片的四个角点的坐标 #tp = array([[675,826,826,677],[55,52,281,277],[1,1,1,1]]) im3 = warp.image_in_image(im1,im2,tp) #image_in_image()函数的输入参数为两幅图像和一个坐标 figure() gray() subplot( 141 ) axis( 'off' ) imshow(im1) subplot( 142 ) axis( 'off' ) imshow(im2) subplot( 143 ) axis( 'off' ) imshow(im3) # 选定im1角上的一些点 m,n = im1.shape[: 2 ] fp = array([[ 0 ,m,m, 0 ],[ 0 , 0 ,n,n],[ 1 , 1 , 1 , 1 ]]) # 第一个三角形 tp2 = tp[:,: 3 ] fp2 = fp[:,: 3 ] # 计算h h = homography.haffine_from_points(tp2,fp2) im1_t = ndimage.affine_transform(im1,h[: 2 ,: 2 ], (h[ 0 , 2 ],h[ 1 , 2 ]),im2.shape[: 2 ]) # 三角形的alpha alpha = warp.alpha_for_triangle(tp2,im2.shape[ 0 ],im2.shape[ 1 ]) im3 = ( 1 - alpha) * im2 + alpha * im1_t # 第二个三角形 tp2 = tp[:,[ 0 , 2 , 3 ]] fp2 = fp[:,[ 0 , 2 , 3 ]] # 计算h h = homography.haffine_from_points(tp2,fp2) #haffine_from_points()返回给定对应点对的最优仿射变换 im1_t = ndimage.affine_transform(im1,h[: 2 ,: 2 ], (h[ 0 , 2 ],h[ 1 , 2 ]),im2.shape[: 2 ]) # 三角形的alpha alpha = warp.alpha_for_triangle(tp2,im2.shape[ 0 ],im2.shape[ 1 ]) im4 = ( 1 - alpha) * im3 + alpha * im1_t subplot( 144 ) imshow(im4) axis( 'off' ) show() |
在实验过程中,也出现了一些问题。
问题一:
为解决问题,先去pcv\pcv-master\pcv\geometry中找到wary.py和homegraphy.py文件,把print后面的语句都加上括号。但是在检查了好几遍括号以后,问题都没有解决,所以重装了一次pcv以后,异常就解决了。(重装pcv的方法在前面的博客有记录)
问题二:
因为是matplotlib发生了异常,所以我把matplotlib卸载了(在终端输入pip uninstall matplotlib),然后重装matplotlib,我在终端输入pip install matplotlib以后,安装无法成功,显示could not install packages due to an environmenterror: [errno 13] permission denied。
这时候解决方法如下,输入:pip install matplotlib --user便可成功安装(注意:是有两个-)。
解决以上两个问题后,代码可正常运行。
以上所述是小编给大家介绍的python计算机视觉 图像扭曲(仿射扭曲)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
原文链接:https://blog.csdn.net/weixin_43848422/article/details/88701017
- python规定输入值的最大值(实例讲解Python中整数的最大值输出)
- 用python图片转字符串(python实现图片转字符小工具)
- python和mysql实战(由Python编写的MySQL管理工具代码实例)
- python写的工具(python调用虹软2.0第三版的具体使用)
- pythonexcel报表实例(对python生成业务报表的实例详解)
- python识别验证码教程(Python3.5 + sklearn利用SVM自动识别字母验证码方法示例)
- python远程下发shell指令(Python实现堡垒机模式下远程命令执行操作示例)
- python将字符串转换为时间格式(Python时间和字符串转换操作实例分析)
- python八卦图(Python实现九宫格式的朋友圈功能内附“马云”朋友圈)
- python循环语句嵌套使用(Python分支语句与循环语句应用实例分析)
- python3.9.6生成的注册表(厉害了,Python也能操作注册表)
- python栈和队列(Python 实现数据结构中的栈队列)
- python如何判断是否为回文数(对python判断是否回文数的实例详解)
- python实现栈和队列(Python利用heapq实现一个优先级队列的方法)
- python验证码处理教程(python简单验证码识别的实现方法)
- python字典的值排序(python 对字典按照value进行排序的方法)
- ()
- 百事大吉蓝底 绿底手机高清壁纸(绿底手机高清壁纸)
- 蓝底证件照怎么制作 证件照换底色 换尺寸快速搞定(蓝底证件照怎么制作)
- 你喜欢足球吗 足球如何点亮世界的(足球如何点亮世界的)
- 不可分鸽是什么梗(不可分鸽是什么梗)
- 古代的鸽子是爱情的象征,并非和平的使者(古代的鸽子是爱情的象征)
热门推荐
- 将mysql中的表导出来(MySQL之导出整个及单个表数据的操作)
- mysql索引提高效率(MySql如何查看索引并实现优化)
- sql server没有服务器怎么办(SQL Server 2012安装后服务器名称找不到的解决办法)
- javascriptloop教程(JavaScript中的AOP编程的基本实现)
- tomcat docker 性能(Docker Nginx容器和Tomcat容器实现负载均衡与动静分离操作)
- 简单laravel框架教程交流(使用composer 安装 laravel框架的方法图文详解)
- 面试时的着装打扮
- iframe嵌入页面跨域(使用iframe+postMessage实现页面跨域通信的示例代码)
- 实战部署nginxdocker(基于Docker、Nginx和Jenkins实现前端自动化部署)
- mysql云数据库数据恢复(MySQL 利用frm文件和ibd文件恢复表数据)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9