Python+OpenCV学习(14)---Laplace金字塔进行图像融合
来源:互联网 发布:最新网页制作软件 编辑:程序博客网 时间:2024/05/06 04:23
利用python学习OpenCV,个人感觉比较方便。函数的形式与C++基本相同,所以切换过来还是比较好的,对于像我这种对python不太熟练的人,使用python的集成开发环境PyCharm进行学习,可以设置断点调试,有助于我这类初学者理解掌握。
下面是利用python语言结合OpenCV进行图像融合的代码:
# -*- coding:utf-8 -*-__author__ = 'Microcosm'import cv2import numpy as npfrom matplotlib import pyplot as pltdef sameSize(img1, img2): """ 使得img1的大小与img2相同 """ rows, cols, dpt = img2.shape dst = img1[:rows,:cols] return dstapple = cv2.imread("E:\python\Python Project\opencv_showimage\images\\apple.jpg")orange = cv2.imread("E:\python\Python Project\opencv_showimage\images\\orange.jpg")# 对apple进行6层高斯降采样G = apple.copy()gp_apple = [G]for i in xrange(6): G = cv2.pyrDown(G) gp_apple.append(G)# 对orange进行6层高斯降采样G = orange.copy()gp_orange = [G]for j in xrange(6): G = cv2.pyrDown(G) gp_orange.append(G)# 求apple的Laplace金字塔lp_apple = [gp_apple[5]]for i in xrange(5,0,-1): GE = cv2.pyrUp(gp_apple[i]) L = cv2.subtract(gp_apple[i-1], sameSize(GE,gp_apple[i-1])) lp_apple.append(L)# 求orange的Laplace金字塔lp_orange = [gp_orange[5]]for i in xrange(5,0,-1): GE = cv2.pyrUp(gp_orange[i]) L = cv2.subtract(gp_orange[i-1], sameSize(GE,gp_orange[i-1])) lp_orange.append(L)# 对apple和orange的Laplace金字塔进行1/2拼接LS = []for la,lb in zip(lp_apple,lp_orange): rows,cols,dpt = la.shape ls = np.hstack((la[:,0:cols/2],lb[:,cols/2:])) LS.append(ls)# 对拼接后的Laplace金字塔重建获取融合后的结果ls_reconstruct = LS[0]for i in xrange(1,6): ls_reconstruct = cv2.pyrUp(ls_reconstruct) ls_reconstruct = cv2.add(sameSize(ls_reconstruct,LS[i]), LS[i])# 各取1/2直接拼接的结果r,c,depth = apple.shapereal = np.hstack((apple[:,0:c/2],orange[:,c/2:]))plt.subplot(221), plt.imshow(cv2.cvtColor(apple,cv2.COLOR_BGR2RGB))plt.title("apple"),plt.xticks([]),plt.yticks([])plt.subplot(222), plt.imshow(cv2.cvtColor(orange,cv2.COLOR_BGR2RGB))plt.title("orange"),plt.xticks([]),plt.yticks([])plt.subplot(223), plt.imshow(cv2.cvtColor(real,cv2.COLOR_BGR2RGB))plt.title("real"),plt.xticks([]),plt.yticks([])plt.subplot(224), plt.imshow(cv2.cvtColor(ls_reconstruct,cv2.COLOR_BGR2RGB))plt.title("laplace_pyramid"),plt.xticks([]),plt.yticks([])plt.show()
注意:图像先经过降采样,然后再上采样恢复的时候大小可能不同,这会导致后面的拼接出现问题,因为调用函数cv2.subtrack()和函数cv2.add()需要保证两幅图像尺寸、通道数完全相同,否则会报错。
运行结果为:
测试图片
0 0
- Python+OpenCV学习(14)---Laplace金字塔进行图像融合
- python+opencv图像金字塔融合
- Python-OpenCV教程-8-图像金字塔融合
- opencv-python(14):图像金字塔
- python+opencv图像金字塔融合 (超详细讲解原理及代码讲解)
- 自学OPENCV+PYTHON+MACOS-X(4)图形金字塔进行苹果和橘子融合详解
- 【学习OpenCV】图像金字塔
- python opencv入门 图像金字塔(16)
- opencv学习笔记(十四)图像金字塔
- OpenCV学习之采用金字塔方法进行图像分割
- OpenCV学习笔记-图像金字塔
- opencv学习(5)---图像金字塔
- OpenCV学习笔记-图像金字塔
- OpenCV学习笔记-图像金字塔
- OpenCV学习笔记-图像金字塔
- opencv学习-imgprocess-图像金字塔
- opencv学习笔记--图像金字塔
- 【图像融合】拉普拉斯金字塔融合
- tableView和gesture手势冲突(响应链问题)
- android开发 界面设计 图片资源设计 尺寸说明
- 微信缓存
- getMask
- 添加第三方库到私服
- Python+OpenCV学习(14)---Laplace金字塔进行图像融合
- 圆角dialog实现过程
- 创建graphic的方式:可以添加属性、infoTemplate
- android 设置监听器
- Here Document
- 获取两个字符串中最大相同子串的实现
- c++初始化
- Android进程回收的先后顺序
- Java JVM(十):JavaVisualVM 的个人使用