您的位置:首页 > 编程语言 > Python开发

python计算机视觉学习笔记(3)--图像映射之图像嵌入

2019-03-19 22:52 344 查看

图像中的图像

仿射扭曲的简单例子就是将图像或者图像的一部分放置到另一幅图像中,使得它们能够和指定的区域或者标记物对齐。

将函数image_in_image添加到warp.py文件中。该函数参数为两个图像和一个坐标。并且tp是按照左上角逆时针计算

[code]def image_in_image(im1,im2,tp):
""" Put im1 in im2 with an affine transformation
such that corners are as close to tp as possible.
tp are homogeneous and counter-clockwise from top left. """

# points to warp from
m,n = im1.shape[:2]
fp = array([[0,m,m,0],[0,0,n,n],[1,1,1,1]])

# compute affine transform and apply
H = homography.Haffine_from_points(tp,fp)
im1_t = ndimage.affine_transform(im1,H[:2,:2],
(H[0,2],H[1,2]),im2.shape[:2])
alpha = (im1_t > 0)

return (1-alpha)*im2 + alpha*im1_t

将扭曲的图像和第二张图像融合就创建了alpha图像。该图像定义了每个像素从各个图像中获取的像素值成分多少。

alpha通道

一个图像的每个像素都有 RGB 三个通道,后来 Alvy Ray Smith 提出每个像素再增加一个 Alpha 通道,取值为0到1,用来储存这个像素是否对图片有「贡献」,0代表透明、1代表不透明。也就是说,「Alpha 通道」储存一个值,其外在表现是「透明度」 。阿尔法通道(α Channel或Alpha Channel)是指一张图片的透明和半透明度。例如:一个使用每个像素16比特存储的位图,对于图形中的每一个像素而言,可能以5个比特表示红色,5个比特表示绿色,5个比特表示蓝色,最后一个比特是阿尔法。在这种情况下,它要么表示透明要么不是,因为阿尔法比特只有0或1两种不同表示的可能性。又如一个使用32个比特存储的位图,每8个比特表示红绿蓝,和阿尔法通道。在这种情况下,就不光可以表示透明还是不透明,阿尔法通道还可以表示256级的半透明度,因为阿尔法通道有8个比特可以有256种不同的数据表示可能性。

实验代码及其结果:

[code] # -*- coding: utf-8 -*-
from PCV.geometry import warp, homography
from PIL import  Image
from pylab import *
from scipy import ndimage

# example of affine warp of im1 onto im2

im1 = array(Image.open(r'C:\Users\noob\Desktop\pcv-book-code-master\ch03\4.jpg').convert('L'))
im2 = array(Image.open(r'C:\Users\noob\Desktop\pcv-book-code-master\ch03\1.jpg').convert('L'))
# set to points
tp = array([[15,279,277,39],[36,34,542,540],[1,1,1,1]])
#tp = array([[675,826,826,677],[55,52,281,277],[1,1,1,1]])
im3 = warp.image_in_image(im1,im2,tp)
figure()
gray()
subplot(141)
axis('off')
imshow(im1)
subplot(142)
axis('off')
imshow(im2)
subplot(143)
axis('off')
imshow(im3)
show()

 

参考:

https://www.cnblogs.com/suogasus/p/5311264.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐