python+opencv图像金字塔融合
2016-04-08 16:34
375 查看
图像金字塔操作,又分为高斯金字塔和拉普拉斯金字塔,高斯金字塔简单的理解为图像的downsample和upsample.
拉普拉斯金字塔是图像A - up(down(A))的操作,看上去全是边缘。
#!/usr/bin/env python
import cv2
img = cv2.imread('frame.jpg')
cv2.imshow('src', img)
lower_reso= cv2.pyrDown(img)
print lower_reso.shape
cv2.imshow('downsample', lower_reso)
higher_reso = cv2.pyrUp(lower_reso)
print higher_reso.shape
cv2.imshow('upsample', higher_reso)
cv2.imshow('laplace', img - higher_reso)
cv2.waitKey(0)
两张图像直接拼接和高斯laplace金字塔融合比较:
#!/usr/bin/env python
import cv2
import numpy as np
import sys
A = cv2.imread('frame.jpg')
B = cv2.imread('book.jpg')
#generate gaussian pyramid for A
G=A.copy()
gpA=[G]
for i in xrange(6):
G=cv2.pyrDown(G)
gpA.append(G)
#generate gaussian pyramid for B
G=B.copy()
gpB=[G]
for i in xrange(6):
G=cv2.pyrDown(G)
gpB.append(G)
#generate laplace pyramid for A
lpA = [gpA[5]]
for i in xrange(5, 0, -1):
GE = cv2.pyrUp(gpA[i])
L = cv2.subtract(gpA[i-1], GE)
lpA.append(L)
#generate laplace pyramid for B
lpB = [gpB[5]]
for i in xrange(5, 0, -1):
GE = cv2.pyrUp(gpB[i])
L = cv2.subtract(gpB[i-1], GE)
lpB.append(L)
LS = []
for la,lb in zip(lpA,lpB):
rows, cols, dpt = la.shape
ls = np.hstack((la[:,0:cols/2], lb[:,cols/2:]))
LS.append(ls)
ls_ = LS[0]
for i in xrange(1,6):
ls_ = cv2.pyrUp(ls_)
ls_ = cv2.add(ls_, LS[i])
real = np.hstack((A[:,:cols/2],B[:,cols/2:]))
cv2.imshow('real', real)
cv2.imshow('lap blend', ls_)
cv2.waitKey(0)
拉普拉斯金字塔是图像A - up(down(A))的操作,看上去全是边缘。
#!/usr/bin/env python
import cv2
img = cv2.imread('frame.jpg')
cv2.imshow('src', img)
lower_reso= cv2.pyrDown(img)
print lower_reso.shape
cv2.imshow('downsample', lower_reso)
higher_reso = cv2.pyrUp(lower_reso)
print higher_reso.shape
cv2.imshow('upsample', higher_reso)
cv2.imshow('laplace', img - higher_reso)
cv2.waitKey(0)
两张图像直接拼接和高斯laplace金字塔融合比较:
#!/usr/bin/env python
import cv2
import numpy as np
import sys
A = cv2.imread('frame.jpg')
B = cv2.imread('book.jpg')
#generate gaussian pyramid for A
G=A.copy()
gpA=[G]
for i in xrange(6):
G=cv2.pyrDown(G)
gpA.append(G)
#generate gaussian pyramid for B
G=B.copy()
gpB=[G]
for i in xrange(6):
G=cv2.pyrDown(G)
gpB.append(G)
#generate laplace pyramid for A
lpA = [gpA[5]]
for i in xrange(5, 0, -1):
GE = cv2.pyrUp(gpA[i])
L = cv2.subtract(gpA[i-1], GE)
lpA.append(L)
#generate laplace pyramid for B
lpB = [gpB[5]]
for i in xrange(5, 0, -1):
GE = cv2.pyrUp(gpB[i])
L = cv2.subtract(gpB[i-1], GE)
lpB.append(L)
LS = []
for la,lb in zip(lpA,lpB):
rows, cols, dpt = la.shape
ls = np.hstack((la[:,0:cols/2], lb[:,cols/2:]))
LS.append(ls)
ls_ = LS[0]
for i in xrange(1,6):
ls_ = cv2.pyrUp(ls_)
ls_ = cv2.add(ls_, LS[i])
real = np.hstack((A[:,:cols/2],B[:,cols/2:]))
cv2.imshow('real', real)
cv2.imshow('lap blend', ls_)
cv2.waitKey(0)
相关文章推荐
- python 学习笔记2(list/directory/文件对象/模块/参数传递)
- [pandas] 数据类型学习笔记
- Python如何调用新浪api接口的问题
- python模块及包
- 最长公共子序列(Python)
- Python学习笔记(四)dict和set
- Python基础:数据类型
- 【Python 学习】通过yield 构建迭代生成器
- python re 匹配回车 re.DOTALL
- Python3 连接Mysql
- Python3:set的用法
- python with
- Python3:collections.deque的用法简介
- 博客我回来啦~~~~
- Python多进程并发(multiprocessing)
- 如何用python在mysql上创建1亿条数据
- python实现找出所有包含元音aeiou且只有先后顺序为aeiou的单词
- PyQt5.5.1在Python3.5.1和Visual Studio 2013下的编译
- 【python学习】re模块——正则表达式
- Python与自然语言处理(一)搭建环境