# 假设原始图像是这样的(举例:3行4列的简单图像)
# 数字代表像素值,0为黑色,非0为有效内容
original_image = np.array([
[10, 20, 30, 40], # 第0行
[50, 60, 70, 80], # 第1行
[90, 100, 110, 120] # 第2行
])
# 1. 创建和原图一样大的空白图像(全黑)
blurred_image = np.zeros_like(original_image)
# 此时blurred_image是:
# [[0, 0, 0, 0],
# [0, 0, 0, 0],
# [0, 0, 0, 0]]
height, width = original_image.shape # 3行4列
t = np.linspace(0, 2*np.pi, width) # 生成周期数据
# 2. 遍历每一行(以第1行为例,y=1)
for y in range(height):
# 假设计算出偏移量为2(向右移2格)
offset = 2 # 简化示例,实际由sin函数计算
# 3. 从原图取当前行的数据(关键:操作的是原图数据)
original_row = original_image[y, :] # 对于y=1,取到[50,60,70,80]
# 4. 对原图的这一行进行平移
shifted_row = np.roll(original_row, offset) # 平移后变成[70,80,50,60]
# 5. 处理平移后的空白(右移2格,左边空2格填0)
if offset > 0:
shifted_row[:offset] = 0 # 变成[0,0,50,60]
# 6. 把处理后的行放到新图中(新图不再是全黑)
blurred_image[y, :] = shifted_row # 第1行变成[0,0,50,60]
# 最终blurred_image不再是全黑,而是包含处理后的原图数据
# 比如3行处理完可能是:
# [[0,0,10,20],
# [0,0,50,60],
# [0,0,90,100]]
咱们用 "复印文件" 来打比方,一步一步说清楚这段代码在干嘛:
原始图像就像一张写满数字的纸
|
第一行:10 20 30 40 第二行:50 60 70 80 第三行:90 100 110 120 第二行:50 60 70 80 第三行:90 100 110 120 第三行:90 100 110 120 |
步骤 1:准备一张同样大小的白纸
|
blurred_image = np.zeros_like(original_image) |
→ 就像拿了一张和原始纸张一样大的白纸,准备用来画 "模糊版"
步骤 2:逐行处理(以第二行为例)
|
for y in range(height): # 一行一行来处理 |
→ 就像你拿着原始纸,一行一行地复印
步骤 3:确定平移多少格(这里假设向右移 2 格)
|
offset = 2 # 向右移2格 如果ct 影像,实际过程是sin函数的运算结果决定移动的格子数 |
→ 比如复印第二行时,故意把纸往右挪了 2 格再印
步骤 4:从原图取数据并平移
|
original_row = original_image[y, :] # 取出第二行:[50,60,70,80] shifted_row = np.roll(original_row, offset) # 平移后变成[70,80,50,60] shifted_row = np.roll(original_row, offset) # 平移后变成[70,80,50,60] |
→ 原本第二行是 "50 60 70 80",右移 2 格后,变成 "70 80 50 60"(后面的数字跑到前面了)
步骤 5:处理空白(平移后左边空了 2 格)
|
shifted_row[:offset] = 0 # 变成[0,0,50,60] |
→ 右移后左边空了 2 格,用黑色(0)填上,所以变成 "0 0 50 60"
步骤 6:把处理好的行写到白纸上
|
blurred_image[y, :] = shifted_row # 第二行变成[0,0,50,60] |
→ 把这行处理好的数字写到白纸上对应的位置
最终结果
三行都处理完后,白纸就变成了:
|
第一行:0 0 10 20 (右移2格后的效果) 第二行:0 0 50 60 (右移2格后的效果) 第三行:0 0 90 100(右移2格后的效果) 第二行:0 0 50 60 (右移2格后的效果) 第三行:0 0 90 100(右移2格后的效果) 第三行:0 0 90 100(右移2格后的效果) |
总结
这段代码就是把原始图像的每一行,按照规定的幅度平移后,再写到一张新的白纸上,平移后空出来的地方用黑色填满,这样就做出了 "模糊拖影" 的效果。
595

被折叠的 条评论
为什么被折叠?



