首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >图像相似度

图像相似度

作者头像
用户11971916
发布2025-12-30 15:39:25
发布2025-12-30 15:39:25
150
举报

在网上发现一个有趣的题目 

给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。

输入

第一行包含两个整数m和n,表示图像的行数和列数,用单个空格隔开。1≤m≤100, 1≤n≤100。之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。

输出 

 一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。

输入:

代码语言:javascript
复制
3 3
1 0 1
0 0 1
1 1 0
1 1 0
0 0 1
0 0 1

输出:

代码语言:javascript
复制
44.44

我们可以创建二维数组,通过循环来判断有多少个相似的,在进行计算来算出结果

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//n为行 m为列
	int n = 0;
	int m = 0;
	scanf("%d %d", &n, &m);
	//题目需要两个图比较相似度,我们就创建两个二维数组
	int arr1[100][100] = { 0 };
	int arr2[100][100] = { 0 };
	int i = 0;
	int j = 0;
	//循环两个数组并赋予值
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			scanf("%d ", &arr1[i][j]);
		}
	}
	for (i = 0; i < n; i++)
	{
		for(j=0;j<m;j++)
		{
			scanf("%d ", &arr2[i][j]);
		}
	}
	//输出需要小数点,创建浮点型变量
	float cnt = 0.0;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			if (arr1[i][j] == arr2[i][j])
			{
				cnt++;
			}
		}
	}
	printf("%0.2f", 100*cnt/(n*m));
	//需要保留两位小数点所以设置0.2f
	return 0;
}

 如果有帮助到你的,请点赞加关注哦,谢谢你。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档