蓝桥杯每日一更001之图像模糊

本专栏代码地址 https://github.com/xiawei20161308104/lanqiaobei
本节代码路径 lanqiaobei/others/xiangcheng.py

原题

题目描述
小蓝有一张黑白图像,由 n×m 个像素组成,其中从上到下共 n 行,每行从左到右 m 列。每个像素由一个 0到255 之间的灰度值表示。
现在,小蓝准备对图像进行模糊操作,操作的方法为:
对于每个像素,将以它为中心3✖3区域内的所有像素(可能是9个像素或少于9个像素)求和后除以这个范围内的像素个数(取下整),得到的值就是模糊后的结果.
请注意每个像素都要用原图中的灰度值计算求和。
输入描述
输入的第一行包含两个整数n,m。
第2行到第n+1 行每行包含m 个整数,表示每个像素的灰度值,相邻整数之间用一个空格分隔。
输出描述
输出n 行,每行m 个整数,相邻整数之间用空格分隔,表示模糊后的图像。
示例 1

输入
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

分析

若有一个3✖3的像素,“图像模糊”过程如图。题目所讲的“图像模糊”其实就是卷积操作/平滑滤波啦。
两种情况:

  1. 如像素点1,不够9个像素。
  2. 如像素点5,足够9个像素。
    在这里插入图片描述

解题要点:

  1. 熟练读取二维矩阵
  2. 将计算结构存入二维矩阵
  3. 判断每个像素由几个有效像素点组成,如图的红叉就是无效点

代码+注释

def avg(x, y):
    # 记录周围总的像素和
    s = 0
    # 记录有多少个像素
    cnt = 0
    # 循环遍历位置为当前位置的左一个和右一个,写成范围就是左减一和右加二,因为range左闭右开。
    for i in range(x - 1, x + 1 + 1):
        for j in range(y - 1, y + 1 + 1):
            # 判断坐标的合法性,n为行数,转为坐标第n行坐标应该是n-1,所以坐标最大就到n-1,遂而取值0<=i<n,这样正好只取到n-1
            if 0 <= i < n and 0 <= j < m:
                # 周围像素累加
                s += matrix[i][j]
                # 记录像素个数
                cnt += 1
    # 返回均值,即为模糊之后的像素。题目要求下取整。
    return s // cnt

# 从第一个位置开始遍历求均值
img = [[avg(i, j) for j in range(m)] for i in range(n)]
# 按照行遍历新生成的“模糊图像”
for l in img:
    # [5, 60, 116, 170]
    print(l)
    # *号的作用是传入任意个数变量,这里用来打印刚好。
    # 5 60 116 170
    print(*l)
  • 19
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cv夏一笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值