首页 > 试题广场 >

图像相似度

[编程题]图像相似度
  • 热度指数:20250 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。


输入描述:
第一行包含两个整数m和n,表示图像的行数和列数,用单个空格隔开。1≤m≤100, 1≤n≤100。之后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

输出

44.44
n,m = map(int,input().split())   # map函数用法
arr = [input().split() for _ in range(n)]  # 列表推导式
arr1 = [input().split() for _ in range(n)]
total = n*m     # 总像素点数
count = 0       # 计数相同点
for i in range(n):       # for循环
    for j in range(m):
        if arr[i][j] == arr1[i][j]:
            count += 1
per = count/total*100 # 百分比
print(f"{per:.2f}")  # 格式化输出

发表于 2024-09-29 19:30:08 回复(0)
逐一比较
m,n= map(int,input().split())
a = []
b = []

for i in range(m):
    a.append(list(map(int,input().split())))
for j in range(m):
    b.append(list(map(int,input().split())))

c=0
for i in range(m):
    for j in range(n):
        if a[i][j]==b[i][j]:
            c += 1

print("{:.2f}".format(100*c/(m*n)))


编辑于 2024-02-09 16:26:39 回复(0)
m,n=map(int,input().split())
a=[]
b=[]
for i in range(m):
    a.append(list(map(int,input().split())))
for i in range(m):
    b.append(list(map(int,input().split())))
x=0
for i in range(m):
    for j in range(n):
        if a[i][j]==b[i][j]:
            x=x+1
print('{:.2f}'.format((x*100)/(m*n)))

发表于 2022-06-07 19:48:22 回复(0)