详解Python计算机视觉 图像扭曲ㄗ仿射扭曲ㄘ

 更新时间ㄩ2019年03月27日 15:28:08   作者ㄩweixin_43848422   我要评论

这篇文章主要介绍了Python计算机视觉 图像扭曲ㄗ仿射扭曲ㄘㄛ文中通过示例代码介绍的非常详细ㄛ对大家的学习或者工作具有一定的参考学习价值ㄛ需要的朋友们下面随着小编来一起学习学习吧

对图像块应用仿射变换ㄛ我们将其称为图像扭曲ㄗ或者仿射扭曲ㄘ﹝该操作不仅经常应用在计算机图形学中ㄛ而且经常出现在计算机视觉算法中﹝

一﹜仿射变换原理

仿射变换能够保持图像的※平直性?#20445;?#21253;括旋转ㄛ缩放ㄛ平移ㄛ错切操作﹝对于三个点ㄛ仿射变换可以将一副图像进行扭曲ㄛ使得三对对应点对可以完美地匹配上﹝仿射变换具有6个自由度ㄛ有三个对应点对可以给出6个约束条件ㄗ对于这三个对应点对ㄛx和y坐标必须?#23478;?#21305;配ㄘ

仿射变换是在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射﹝由一个非奇异的线性变换(运用一次函数进行的变换)接上一个平移变换组成﹝在有限维的情况ㄛ每个仿射变换可以由一个矩阵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').convert('L'))
im2 = array(Image.open('beijing.jpg').convert('L'))
# 选定一些目标点
tp = array([[420,830,830,420],[400,350,1060,1000],[1,1,1,1]])
#标记物的坐标tp是用齐次坐标意义下的坐标表示的
#array为 第一张?#35745;?#36148;到第二张?#35745;?#30340;四个角点的坐标
#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后面的语句都加上括号﹝但是在检查了好?#21103;?#25324;号以后ㄛ问题都没有解决ㄛ所以重装了一次pcv以后ㄛ异常就解决了﹝ㄗ重装pcv的方法在前面的博客有记录ㄘ


问题二ㄩ


因为是matplotlib发生了异常ㄛ所以我把matplotlib?#23545;?#20102;ㄗ在终端输入pip uninstall matplotlibㄘㄛ然后重装matplotlibㄛ我在终端输入pip install matplotlib以后ㄛ安装无法成功ㄛ显示Could not install packages due to an EnvironmentError: [Errno 13] Permission denied﹝

这时候解决方法如下ㄛ输入ㄩpip install matplotlib --user便可成功安装ㄗ注意ㄩ是有两个-ㄘ﹝


解决以上两个问题后ㄛ代码可正常运?#23567;?/p>

以上所述是小编给大家介绍的Python计算机视觉 图像扭曲ㄗ仿射扭曲ㄘ详解整合ㄛ希望对大家有所帮助ㄛ如果大家有任?#25105;?#38382;请给我留言ㄛ小编会及时回复大家的﹝在此也非常?#34892;?#22823;家对脚本之家网站的支持ㄐ

相关文章

  • Python实现一个Git日志统计分析的小工具

    Python实现一个Git日志统计分析的小工具

    这篇文章主要给大家介绍了关于利用Python如何实现一个Git日志统计分析小工具的相关资?#24076;?#25991;中通过示例代码介绍的非常详细ㄛ对大家的学习或者工作具有一定的参考学习价值ㄛ需要的朋友们下面随着小编来一起学习学习吧﹝
    2017-12-12
  • python 随机打乱 ?#35745;?#21644;对应的标签方法

    python 随机打乱 ?#35745;?#21644;对应的标签方法

    今天小编就为大家分享一篇python 随机打乱 ?#35745;?#21644;对应的标签方法ㄛ具有很好的参考价值ㄛ希望对大家有所帮助﹝一起跟随小编过来看看吧
    2018-12-12
  • django上传?#35745;?#24182;生成缩略图方法示例

    django上传?#35745;?#24182;生成缩略图方法示例

    这篇文章主要介绍了django上传?#35745;?#24182;生成缩略图方法示例,具有一定借鉴价值ㄛ需要的朋友可以参考下﹝
    2017-12-12
  • python发送邮件的实例代码(支持html﹜?#35745;活?#38468;件)

    python发送邮件的实例代码(支持html﹜?#35745;活?#38468;件)

    python发送邮件的一些例子ㄛ有需要的朋友可以参考下
    2013-03-03
  • wxPython定时器wx.Timer简单应用实例

    wxPython定时器wx.Timer简单应用实例

    这篇文章主要介绍了wxPython定时器wx.Timer简单应用,实例分析了Python使用wxPython创建窗口应用程序及定时器的相关使用?#35760;?需要的朋友可以参考下
    2015-06-06
  • 简单讲解Python中的闭包

    简单讲解Python中的闭包

    这篇文章主要介绍了Python中的闭包,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • 攻击者是如何将PHP Phar包伪装成图像以绕过文件类?#22270;?#27979;的(推荐)

    攻击者是如何将PHP Phar包伪装成图像以绕过文件类?#22270;?#27979;的(推荐)

    这篇文章主要介绍了攻击者是如何将PHP Phar包伪装成图像以绕过文件类?#22270;?#27979;的,需要的朋友可以参考下
    2018-10-10
  • Python Json序列化与反序列化的示例

    Python Json序列化与反序列化的示例

    这篇文章主要介绍了Python Json序列化与反序列化的示例ㄛ小编觉得挺不错的ㄛ现在分享给大家ㄛ也给大家做个参考﹝一起跟随小编过来看看吧
    2018-01-01
  • 最新评论

    常用在线小工具

    賽譴35恁7羲蔣賦彆