python opencv入门 图像金字塔(16)
2017-07-31 10:51
260 查看
内容来自OpenCV-Python Tutorials 自己翻译整理
目标:
学习图像金字塔
使用图像金字塔创造新水果“橘果”(橘子+苹果)
学习函数 cv2.pyrUp(), cv2.pyrDown()
原理:
正常情况下,我们经常处理固定分辨率的图像。有时也会处理不同分辨率的相同图像。例如在图像中找某个东西,比如找人脸,我们不清楚图像中人脸的大小。这时我们需要创建一堆不同分辨率图像,去寻找物体。这些不同分辨率的图像就是图像金字塔(小分辨率的图像在顶部,大的在底部)。
图像金字塔有两种:高斯金字塔和拉普拉斯金字塔
高斯金字塔当中,(高等级)低分辨率的图像由(低等级)高分辨率的图像去除连续的行和列得到。顶部图像的每个像素值等于下面图像的对应像素的5*5区域的高斯加权平均值。这样操作以后,M×N的图像就变成了M/2×N/2的图像了,面积变为原理的四分之一。继续这样的操作就会得到一个图像分辨率递减的金字塔,使用函数cv2.pyrDown() 和 cv2.pyrUp()构建。
cv2.pyrDown()函数构建从高分辨率到低分辨率的金字塔。
cv2.pyrUp() 构建从低分辨率到高分辨率的金字塔(尺寸变大,分辨率不变)
使用cv2.pyrDown函数图像分辨率会降低,信息会被丢失
拉普拉斯金字塔像边界图,很多像素值为0。经常被用在图像压缩中
使用金字塔进行图像混合
图像金字塔的一个应用就是图像混合,由于两个不同图像像素的不连续性,混合后的图像效果很差。这时可以使用图像金字塔。
![](https://img-blog.csdn.net/20170731105018563?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ2ZlaTQ2MTgwNzkxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
步骤:
读入两张图片
构建两张图片的6层高斯金字塔
根据高斯金字塔计算拉普拉斯金字塔
在拉普拉斯金字塔每一层进行融合
融合后重建图像
目标:
学习图像金字塔
使用图像金字塔创造新水果“橘果”(橘子+苹果)
学习函数 cv2.pyrUp(), cv2.pyrDown()
原理:
正常情况下,我们经常处理固定分辨率的图像。有时也会处理不同分辨率的相同图像。例如在图像中找某个东西,比如找人脸,我们不清楚图像中人脸的大小。这时我们需要创建一堆不同分辨率图像,去寻找物体。这些不同分辨率的图像就是图像金字塔(小分辨率的图像在顶部,大的在底部)。
图像金字塔有两种:高斯金字塔和拉普拉斯金字塔
高斯金字塔当中,(高等级)低分辨率的图像由(低等级)高分辨率的图像去除连续的行和列得到。顶部图像的每个像素值等于下面图像的对应像素的5*5区域的高斯加权平均值。这样操作以后,M×N的图像就变成了M/2×N/2的图像了,面积变为原理的四分之一。继续这样的操作就会得到一个图像分辨率递减的金字塔,使用函数cv2.pyrDown() 和 cv2.pyrUp()构建。
cv2.pyrDown()函数构建从高分辨率到低分辨率的金字塔。
cv2.pyrUp() 构建从低分辨率到高分辨率的金字塔(尺寸变大,分辨率不变)
使用cv2.pyrDown函数图像分辨率会降低,信息会被丢失
拉普拉斯金字塔像边界图,很多像素值为0。经常被用在图像压缩中
使用金字塔进行图像混合
图像金字塔的一个应用就是图像混合,由于两个不同图像像素的不连续性,混合后的图像效果很差。这时可以使用图像金字塔。
import cv2 import numpy as np,sys A = cv2.imread('apple.jpg') B = cv2.imread('orange.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 Laplacian 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 Laplacian 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) # Now add left and right halves of images in each level 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) # now reconstruct ls_ = LS[0] for i in xrange(1,6): ls_ = cv2.pyrUp(ls_) ls_ = cv2.add(ls_, LS[i]) # image with direct connecting each half real = np.hstack((A[:,:cols/2],B[:,cols/2:])) cv2.imwrite('Pyramid_blending2.jpg',ls_) cv2.imwrite('Direct_blending.jpg',real)
步骤:
读入两张图片
构建两张图片的6层高斯金字塔
根据高斯金字塔计算拉普拉斯金字塔
在拉普拉斯金字塔每一层进行融合
融合后重建图像
相关文章推荐
- OpenCV+Python车牌字符分割和识别入门
- Python一天入门16:面向对象的编程3-继承
- python opencv 入门 绘图函数 (3)
- python入门系列16―——正则表达式1
- ubuntu14/16 安装python3-opencv3_百度经验
- python opencv入门 轮廓(17)
- OpenCV+Python教程之2- 一个加载灰度图的入门程序
- python opencv入门 颜色空间转换(9)
- python opencv入门 使用 GrabCut 交互式提取前景(30)
- python opencv入门 直方图均衡化(22)
- python opencv入门 2D直方图(23)
- python+opencv图像金字塔融合
- python入门opencv踩过的坑
- Python入门的36个例子之16: 关键参数 —— 嘿!请把这个纸条给小强
- Caffe深度学习入门——Ubuntu16.04 + CUDA9.1+cudnn7.5 + opencv3.3.1+python3.5+caffe安装参考博客和跳坑笔记
- python opencv入门(学习笔记no.3)-从摄像头读取视频并显示
- python opencv入门 分水岭算法(29)
- 【OpenCV入门教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
- python opencv入门 Harris角点检测(31)
- python opencv入门 Canny边缘检测(15)