[题目描述]
给定 n 行 m 列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:
1. 四周最外侧的像素点灰度值不变。
2. 中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(四舍五入)
输入:
输入共 n + 1 行,第一行包含两个整数 n,m (1 <= n,m <= 100),表示图像包含像素点的行数和列数。
接下来 n 行,每行 m 个整数,表示图像的每个像素点灰度,相邻两个整数之间用一个空格隔开。
输出:
输出共 n 行,每行 m 个整数,表示模糊处理后的图像,相邻整数用一个空格分隔开。
样例输入1
4 5
100 0 100 0 50
50 100 200 0 0
50 50 100 100 200
100 100 50 50 100
样例输出1
100 0 100 0 50
50 80 100 60 0
50 80 100 90 200
100 100 50 50 100
提示:
保证输入的每个像素点灰度的大小均在 0 ~ 255 之间。
来源/分类(难度系数:一星)
完整代码展示:
a,b=map(int,input().split())
c=[]
for i in range(a):
d=list(map(int,input().split()))
c.append(d)
if len(c)<3:
e=0
while e<len(c):
sum=""
for j in range(0,len(c[e])):
sum+="{} ".format(c[e][j])
print(sum)
e+=1
else:
e=0
while e<len(c):
sum=""
for k in range(0,len(c[e])):
if e>=1 and k>=1 and e<=len(c)-2 and k<=len(c[e])-2:
sum+="{} ".format(round((c[e][k]+c[e-1][k]+c[e][k-1]+c[e+1][k]+c[e][k+1])/5))
else:
sum+="{} ".format(c[e][k])
print(sum)
e+=1
代码解释:
“a,b=map(int,input().split())
c=[]
for i in range(a):
d=list(map(int,input().split()))
c.append(d) ”,,让用户输入矩阵的行数a和列数b。建立空列表c,让用户依次输入矩阵的每一行,并将其添加进列表c,以此循环a次。
“if len(c)<3:
e=0
while e<len(c):
sum=""
for j in range(0,len(c[e])):
sum+="{} ".format(c[e][j])
print(sum)
e+=1 ”,当行数小于3时,不对矩阵中任何元素进行处理,打印原矩阵。
“else:
e=0
while e<len(c):
sum=""
for k in range(0,len(c[e])):
if e>=1 and k>=1 and e<=len(c)-2 and k<=len(c[e])-2:
sum+="{} ".format(round((c[e][k]+c[e-1][k]+c[e][k-1]+c[e+1][k]+c[e][k+1])/5))
else:
sum+="{} ".format(c[e][k])
print(sum)
e+=1 ”,当矩阵行数大于等于3时,对矩阵的非边缘元素进行题目所给的模糊处理(将其值替换为它及它上下左右的元素的和的平均值)。打印处理过后的矩阵。(解题核心:根据对矩阵的理解可判断行数列数大于等于2,且行数小于等于a-1,列数小于等于b-1的元素均为非边缘元素;非边缘元素周围的元素即该元素行,列数加减1的元素。)
运行效果展示: