前言
今天我们一起学习一下怎么样计算图像的相似度。
图像的相似度
题目来源:
描述
给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。
输入描述:
第一行包含两个整数m和n,表示图像的行数和列数,用单个空格隔开。1≤m≤100, 1≤n≤100。之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。
输出描述:
一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。
解题过程
1、分析问题
要判断两个数组中有多少个元素相同,才能算出百分比。
在使用除法的时候,一定要注意到它是整数输出。
2、代码如下
#include<stdio.h> int main(){ int m=0,n=0,a=0; int arr1[100][100]={0}; int arr2[100][100]={0}; //初始化数组 scanf("%d %d",&m,&n); for(int i=0;i<m;i++){ //输入数组1 for(int j=0;j<n;j++){ scanf("%d ",&arr1[i][j]); } } for(int i=0;i<m;i++){ //输入数组2 for(int j=0;j<n;j++){ scanf("%d ",&arr2[i][j]); } } for(int i=0;i<m;i++){ //对比两个数组是否相等 for(int j=0;j<n;j++){ if(arr1[i][j]==arr2[i][j]){ a++; //记录有多少个相等的元素 } } } printf("%.2f\n",100.0 * a / (m * n)); //记住除法是整形输出呦,不要忘记.0哈 return 0; }
总结
本文只是简单地介绍了怎么计算图像的相似度,关键其实在于怎么判断出相同元素的个数,希望对大家有帮助,如有错误请指出,谢谢啦~
码字不易,请多多支持~