Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 051f311

Browse files
committed
update ch20
1 parent b1252da commit 051f311

File tree

5 files changed

+81
-18
lines changed

5 files changed

+81
-18
lines changed

‎ch19-Canny边缘检测/19.Canny.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import numpy as np
3030
from matplotlib import pyplot as plt
3131

32-
img = cv2.imread('../data/messi5.jpg', 0)
32+
img = cv2.imread('../data/messi5.jpg')
3333
edges = cv2.Canny(img, 100, 200)
3434

3535
plt.subplot(121), plt.imshow(img, cmap='gray')
Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,68 @@
11
# -*- coding: utf-8 -*-
22

3+
'''
4+
图像 字塔的一个应用是图像 合。例如 在图像缝合中 你 将两幅 图叠在一 但是由于 接区域图像像素的不 续性 整幅图的效果看 来会 很差。 时图像 字塔就可以排上用场了 他可以帮你实现无缝 接。 的 一个经典案例就是将两个水果 合成一个 看看下图也 你就明白我在 什么 了。
5+
6+
7+
实现上 效果的步 如下
8+
1. 入两幅图像 苹果和句子
9+
2. 构建苹果和橘子的 斯 字塔 6 层
10+
3. 根据 斯 字塔 算拉普拉斯 字塔
11+
4. 在拉普拉斯的每一层 图像 合 苹果的左 与橘子的右 合 5. 根据 合后的图像 字塔 建原始图像。
12+
'''
13+
314
import cv2
4-
import numpy as np,sys
15+
import numpy as np, sys
16+
517
A = cv2.imread('apple.jpg')
618
B = cv2.imread('orange.jpg')
19+
720
# generate Gaussian pyramid for A
821
G = A.copy()
922
gpA = [G]
10-
for i in xrange(6):
23+
for i in range(6):
1124
G = cv2.pyrDown(G)
1225
gpA.append(G)
26+
1327
# generate Gaussian pyramid for B
1428
G = B.copy()
1529
gpB = [G]
16-
for i in xrange(6):
30+
for i in range(6):
1731
G = cv2.pyrDown(G)
1832
gpB.append(G)
33+
1934
# generate Laplacian Pyramid for A
2035
lpA = [gpA[5]]
21-
for i in xrange(5,0,-1):
36+
for i in range(5,0, -1):
2237
GE = cv2.pyrUp(gpA[i])
23-
L = cv2.subtract(gpA[i-1],GE)
38+
L = cv2.subtract(gpA[i-1],GE)#TODO error
2439
lpA.append(L)
2540

2641
# generate Laplacian Pyramid for B
2742
lpB = [gpB[5]]
28-
for i in xrange(5,0,-1):
43+
for i in range(5,0, -1):
2944
GE = cv2.pyrUp(gpB[i])
30-
L = cv2.subtract(gpB[i-1],GE)
45+
L = cv2.subtract(gpB[i-1],GE)
3146
lpB.append(L)
47+
3248
# Now add left and right halves of images in each level
33-
#numpy.hstack(tup)
34-
#Take a sequence of arrays and stack them horizontally
35-
#to make a single array.
49+
#numpy.hstack(tup)
50+
#Take a sequence of arrays and stack them horizontally
51+
#to make a single array.
3652
LS = []
37-
for la,lb in zip(lpA,lpB):
38-
rows,cols,dpt = la.shape
39-
ls = np.hstack((la[:,0:cols/2], lb[:,cols/2:]))
53+
for la,lb in zip(lpA,lpB):
54+
rows,cols,dpt = la.shape
55+
ls = np.hstack((la[:,0:cols/2], lb[:,cols/2:]))
4056
LS.append(ls)
57+
4158
# now reconstruct
4259
ls_ = LS[0]
43-
for i in xrange(1,6):
60+
for i in range(1,6):
4461
ls_ = cv2.pyrUp(ls_)
4562
ls_ = cv2.add(ls_, LS[i])
4663

4764
# image with direct connecting each half
48-
real = np.hstack((A[:,:cols/2],B[:,cols/2:]))
65+
real = np.hstack((A[:,:cols/2],B[:,cols/2:]))
4966

50-
cv2.imwrite('Pyramid_blending2.jpg',ls_)
51-
cv2.imwrite('Direct_blending.jpg',real)
67+
cv2.imwrite('Pyramid_blending2.jpg',ls_)
68+
cv2.imwrite('Direct_blending.jpg',real)

‎ch20-图像金字塔/apple.jpg‎

17.4 KB
Loading[フレーム]

‎ch20-图像金字塔/orange.jpg‎

18 KB
Loading[フレーム]
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# -*- coding: utf-8 -*-
2+
# @Time : 2017年7月12日 下午3:06
3+
# @Author : play4fun
4+
# @File : 图像金字塔.py
5+
# @Software: PyCharm
6+
7+
"""
8+
图像金字塔.py:
9+
一般情况下 我们 处理是一副具有固定分辨率的图像。
10+
但是有些情况下 我们 对同一图像的不同分 率的子图像 处理。
11+
比如 我们 在一幅图 像中查找某个目标 比如脸 我们不知 目标在图像中的尺寸大小。
12+
这种情况下 ,我们 创建创建一组图像 , 这些图像是具有不同分 率的原始图像。
13+
我们把这组图像叫做图像金字塔
14+
简单来说 就是同一图像的不同分辨率的子图集合 。
15+
16+
如果我们把最大的图像放在底部,最小的放在顶部
17+
看起来像一座金字塔, 故而得名:图像金字塔。
18+
有两类图像金字塔: 高斯金字塔和拉普拉斯金字塔。
19+
20+
高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的。
21+
图像中的每个像素值等于下一层图像中 5 个像素的 斯加权平均值。
22+
这样 操作一次一个 MxN 的图像就变成了一个 M/2xN/2 的图像。
23+
所以 这幅图像 的面积就变为原来图像面积的四分之一。 这称为 Octave。
24+
连续进行这样 的操作我们就会得到一个分辨率不断下降的图像金字塔。
25+
我们可以使用函数 cv2.pyrDown() 和 cv2.pyrUp() 构建图像金字塔。
26+
27+
28+
"""
29+
30+
import cv2
31+
import numpy as np
32+
33+
higher_reso = cv2.imread('../data/messi5.jpg')
34+
# 函数 cv2.pyrDown() 从一个 分辨率大尺寸的图像向上构建一个金子塔
35+
# 尺寸变小 分辨率降低 。
36+
lower_reso = cv2.pyrDown(higher_reso)
37+
cv2.imshow('lower_reso', lower_reso)
38+
39+
# 从一个低分 率小尺寸的图像向下构建一个 子塔 尺 寸变大 但分 率不会增加
40+
higher_reso2 = cv2.pyrUp(lower_reso)
41+
cv2.imshow('higher_reso2', higher_reso2)
42+
43+
# 你 住的是是 higher_reso2 和 higher_reso 是不同的。因为一旦使 用 cv2.pyrDown() 图像的分辨率就会 低 ,信息就会 丢失
44+
45+
cv2.waitKey(0)
46+
cv2.destroyAllWindows()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /