题解:蓝桥云课 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

【解题思路】

image

【算法标签】

《蓝桥云课 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
posted @ 2026-03-04 10:43  团爸讲算法  阅读(2)  评论(0)    收藏  举报