解题思路:
一、需求分析
1.n行m列的图像各像素点的灰度值
解读:定义一个二维数组int[][] image用来存储初始的图像灰度值;定义两个全局变量分别表示图像的行列数;
2.四周最外侧的像素点灰度值不变
解读:用for循环获取二维数组中记载的图像灰度值,并用if语句进行判断是否为最外侧,最外侧的情况有四种: 行的最上侧、行的最下侧、列的最右侧以及列的最左侧,因为平行关系用异或||逻辑运算符即可;
3.中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)
解读:定义局部变量sum便于将该点以及邻近四个点求和,再求平均值。因为题目要求舍入到最接近的整数,需调用Math.round()方法
扩展:Math.round() 是 Java 中的数学方法,用于执行四舍五入的操作。它会将浮点数或双精度数取最接近的整数值。
4.n行,每行m个整数,为模糊处理后的图像。相邻两个整数之间用单个空格隔开。
解读:输出语句外加一个空字符串完成连接操作
二、过程设计
1.blur是指使图像或物体失去清晰度、模糊不清的效果,可以作为名词或动词使用。在上述代码中,“blur” 就是指对图像进行模糊化处理,使其变得模糊不清。(见名知义)
2.运用for循环给image数组键盘录入初始图像灰度值
3.因为需要对图像进行模糊化处理,所以需要定义一个新的数组blurredImage,用来接收处理后的图像灰度值;需要注意题目中最外侧情况的判断,将判断后不满足最外侧的数据进行求和,并将求和结果求平均值并四舍五入,最后赋值给数组blurredImage
4.将处理后得到的数组blurredImage,循环获取其中的值,并加一个空字符连接System.out.print(blurredImage[i][j] + " "),当一行中数据获取完后进行换行操作 System.out.println();
5.该题我认为不容易理解的是最外侧情况的判断,需要仔细思考
参考代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); // 图像行数
int m = scanner.nextInt(); // 图像列数
int[][] image = new int[n][m]; // 存储图像灰度值的二维数组
// 读取图像的灰度值
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
image[i][j] = scanner.nextInt();
}
}
// 处理图像,进行模糊化
int[][] blurredImage = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (i == 0 || j == 0 || i == n - 1 || j == m - 1) {
// 最外侧像素点保持不变
blurredImage[i][j] = image[i][j];
} else {
// 对中间像素点进行模糊化处理,计算平均灰度值
int sum = image[i][j] + image[i - 1][j] + image[i + 1][j] + image[i][j - 1] + image[i][j + 1];
blurredImage[i][j] = Math.round(sum / 5.0f);
}
}
}
// 输出模糊化处理后的图像
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print(blurredImage[i][j] + " ");
}
System.out.println();
}
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复