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转换doc到pdf(利用python将图片版PDF转文字版PDF)
- python字符处理的函数(Python字符串内置函数功能与用法总结)
- python怎么抽取微信图片(Python 一键制作微信好友图片墙的方法)
- python 迭代对象必须实现哪些方法(详解python之heapq模块及排序操作)
- python实用教程(Python简直是万能的,这5大主要用途你一定要知道!推荐)
- python机器人开发(python程序控制NAO机器人行走)
- python端口扫描脚本测试(Python实现的IP端口扫描工具类示例)
- python怎么查看函数的返回值(python在回调函数中获取返回值的方法)
- python爬取数据总结(python3爬虫学习之数据存储txt的案例详解)
- pythondict排序原理(Python标准库使用OrderedDict类的实例讲解)
- python使用telnet(python 处理telnet返回的More,以及get想要的那个参数方法)
- pythonpick教程(Python使用Pickle模块进行数据保存和读取的讲解)
- python处理所有异常(Python异常处理知识点总结)
- 如何用python爬取最新电影(使用python实现抓取腾讯视频所有电影的爬虫)
- python3.8爬虫需要的包(python爬取基于m3u8协议的ts文件并合并)
- python中for语句的无限循环(python使用for循环计算0-100的整数的和方法)
- 一课译词 放鸽子(一课译词放鸽子)
- 终于来了,淘宝更改账户名测试中,快去看看你能不能修改(淘宝更改账户名测试中)
- 淘宝支持账号名修改,网友 终于可以 重新做人 了(淘宝支持账号名修改)
- 盘点那些年让人称奇的年终奖 最后一个赢辣条毫无悬念(盘点那些年让人称奇的年终奖)
- 你还没有升职吗 他竟因为几套激励理论,升职了(你还没有升职吗)
- 某知名企业绩效管理体系及薪酬分配体系操作手册(某知名企业绩效管理体系及薪酬分配体系操作手册)
热门推荐
- 关闭visual studio 的实时调试
- linux系统查看nginx系统版本(Linux中Nginx的防盗链和优化的实现代码)
- anaconda如何配置python3.7(WIn10+Anaconda环境下安装PyTorch避坑指南)
- SQL Server表误删记录如何恢复
- 如何配置ftp服务器连接(云服务器设置ftp服务器配置怎么操作?)
- 数据库having的用法(数据库SQL中having和where的用法区别)
- 用js编写tab栏切换(JavaScript实现简易tab栏切换内容栏)
- Forms.Timer、Timers.Timer、Threading.Timer的区别
- phpmysql网站开发入门与提高(PHP+MySQL+sphinx+scws实现全文检索功能详解)
- Tomcat和Weblogic部署纯html文件过程解析(Tomcat和Weblogic部署纯html文件过程解析)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9