题解:蓝桥云课 550 图像模糊
【题目来源】
蓝桥云课:1.图像模糊 - 蓝桥云课 (lanqiao.cn)
【题目描述】
小蓝有一张黑白图像, 由n x m个像素组成, 其中从上到下共n行, 每行从左到右m 列。每个像素由一个0到255之间的灰度值表示。
现在,小蓝准备对图像进行模糊操作,操作的方法为:
对于每个像素,将以它为中心3×3区域内的所有像素(可能是9个像素或少于9个像素)求和后除以这个范围内的像素个数(取下整),得到的值就是模糊后的结果。
请注意每个像素都要用原图中的灰度值计算求和。
【输入】
输入的第一行包含两个整数n,m。
第2行到第n+1行每行包含m个整数,表示每个像素的灰度值,相邻整数之间用一个空格分隔。
其中,1≤n,m≤100。
【输出】
输出n行,每行m个整数,相邻整数之间用空格分隔,表示模糊后的图像。
【输入样例】
3 4
0 0 0 255
0 0 255 0
0 30 255 255
【输出样例】
0 42 85 127
5 60 116 170
7 90 132 191
【解题思路】

【算法标签】
《蓝桥云课 550 图像模糊》 #2021# #模拟# #枚举# #省模拟赛#
【代码详解】
n, m = map(int, input().split())
Map = []
for i in range(n):
a = list(map(int, input().split()))
Map.append(a)
#构建一个N行M列二维list
ans = [[0]*m for i in range(n)]
for i in range(n):
for j in range(m):
#遍历每个位置,求出模糊后的结果
#遍历周围的3*3区域
tot, cnt = 0, 0 #分别表示总和、个数
for delta_x in [-1, 0, 1]:
for delta_y in [-1, 0, 1]:
x = i+delta_x
y = j+delta_y
#判断坐标(x, y)是否存在
if 0<=x<n and 0<=y<m:
#更新和、个数
tot += Map[x][y]
cnt += 1
ans[i][j] = tot // cnt
for a in ans:
print(" ".join(map(str, a)))
【运行结果】
3 4
0 0 0 255
0 0 255 0
0 30 255 255
0 42 85 127
5 60 116 170
7 90 132 191
浙公网安备 33010602011771号