1.图像相似度—题目描述
给出两幅相同大小的黑白图像(用 0−1矩阵)表示,求它们的相似度。
说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。
输入格式
第一行包含两个整数 m 和 n,表示图像的行数和列数,中间用单个空格隔开。
之后 m 行,每行 n个整数 0 或 1,表示第一幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。
之后 m 行,每行 n 个整数 0 或 1,表示第二幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。
输出格式
一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。
输入输出样例
输入 #1
3 3 1 0 1 0 0 1 1 1 0 1 1 0 0 0 1 0 0 1
输出 #1
44.44
m,n=map(int,input().split())
a=[[0 for _ in range(n)]for _ in range(m)]
b=[[0 for _ in range(n)]for _ in range(m)]
x=0
for i in range(m):
row=input().split()
for j in range(n):
a[i][j]=eval(row[j])
for i in range(m):
row=input().split()
for j in range(n):
b[i][j]=eval(row[j])
for i in range(m):
for j in range(n):
if a[i][j]==b[i][j]:
x=x+1
print("%.2f"%(x/(m*n)*100))
解析:
- a=[[0 for _ in range(n)]for _ in range(m)]定义一个m行n列的矩阵。
- 输入数据给矩阵赋值。
- 直接循环判断两个矩阵的相同的点,除以矩阵大小即得出相似度。
2.图像旋转—题目描述
输入一个 n 行 m 列的黑白图像,将它顺时针旋转 90度后输出。
输入格式
第一行包含两个整数 n 和 m,表示图像包含像素点的行数和列数。
接下来 n行,每行 m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开。
输出格式
m 行,每行 n个整数,为顺时针旋转 90度后的图像。相邻两个整数之间用单个空格隔开。
输入输出样例
输入 #1
3 3 1 2 3 4 5 6 7 8 9
输出 #1
7 4 1 8 5 2 9 6 3
n,m=map(int,input().split())
a=[[0 for _ in range(m)]for _ in range(n)]
for i in range(n):
x=input().split()
for j in range(m):
a[i][j]=int(x[j])
for i in range(m):
for j in range(n-1,-1,-1):
print(a[j][i],end=' ')
print()
解析:
- 旋转90度后矩阵元素的下标:
a[2][0] a[1][0] a[0][0]
a[2][1] a[1][1] a[0][1]
a[2][2] a[1][2] a[0][2]
- 所以将列下标倒序输出即可。
3.图像模糊处理—题目描述
给定 n行 m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理:
1. 四周最外侧的像素点灰度值不变;
2. 中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均(舍入到最接近的整数)。
输入格式
第一行包含两个整数 n 和 m,表示图像包含像素点的行数和列数。
接下来 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
n,m=map(int,input().split())
a=[[0 for _ in range(m)]for _ in range(n)]
b=[[0 for _ in range(m)]for _ in range(n)]
for i in range(n):
x=input().split()
for j in range(m):
a[i][j]=int(x[j])
for i in range(n):
for j in range(m):
if i==0 or i==n-1 or j==0 or j==m-1:
b[i][j]=a[i][j]
else:
b[i][j]=round((a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5)
for i in range(n):
for j in range(m):
print(b[i][j],end=' ')
print()
解析:
- 定义两个矩阵,一个原矩阵,一个新矩阵。
- 首先判断是否首行、末行、首列、末列,如果是,值不变。
- 如果不是,求出该元素及其上下左右相邻四个像素点原灰度值的平均值覆盖原值。
- 输出新矩阵即可。
到矩阵啦~