首页 > 试题广场 >

图像相似度

[编程题]图像相似度
  • 热度指数: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
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <malloc.h>

int main()
{
    int row = 0;
    int col = 0;
    int* one = NULL;
    int* two = NULL;
    int i = 0;
    int j = 0;
    float same = 0.0f;

    scanf("%d%d", &row, &col);

    //开辟空间,存放2和图像
    one = (int*)malloc(sizeof(int) * row * col);
    if (!one)
    {
        perror("malloc:one");
        return 1;
    }
    two = (int*)malloc(sizeof(int) * row * col);
    if (!two)
    {
        perror("malloc:two");
        return 1;
    }

    //录入图像1
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            scanf("%d", one + (i * col) + j);
        }
    }
    //录入图像2
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            scanf("%d", two + (i * col) + j);
        }
    }

    //比对2个图像差异
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            if (*(one + (i * col) + j) == *(two + (i * col) + j))
            {
                same++;
            }
        }
    }
    same = same / (row * col) * 100;//输出的是百分之,故*100

    printf("%.2f\n", same);

    //释放内存
    free(one);
    free(two);
    one = NULL;
    two = NULL;

    return 0;
}

编辑于 2024-03-19 15:22:09 回复(0)
#include<stdio.h> 
 int main()
{
	int n, m;
	scanf("%d %d",&n,&m);

	int hs[1000][1000];
	int ls[1000][1000];

	int p = 0;

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			scanf("%d", &hs[i][j]);
		}
	}

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			scanf("%d", &ls[i][j]);
		}
	}


	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (hs[i][j] != ls[i][j])
			{
				p++;
			}
		}
	} 

	float s = (1 - (float)p / (n * m)) * 100;
	printf("%.2f", s);
	return 0;
}

编辑于 2024-03-11 21:47:26 回复(0)
#include <stdio.h>

int main() {
    int m, n;
    scanf("%d %d", &m, &n);
    int arr_1[m][n], arr_2[m][n];
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &arr_1[i][j]);
        }
    }
    int tag = 0;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &arr_2[i][j]);
            if(arr_1[i][j] == arr_2[i][j]){
                tag++;
            }
        }
    }
    printf("%.2f", (float)tag*100/(m*n));
    return 0;
}

编辑于 2024-02-05 10:48:43 回复(0)
#include <stdio.h>

int main() {
     int m,n=0;
     scanf("%d %d",&m,&n);
     int arr1[100][100]={0};
     int arr2[100][100]={0};
    int i,j,count=0;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&arr1[i][j]);
        }
    }
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&arr2[i][j]);
        }
    }
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            if(arr1[i][j]==arr2[i][j])
            {
                count++;
            }
        }
    }
    printf("%.2f\n",100.0*count/(m*n));
    return 0;
}

编辑于 2024-01-17 21:36:21 回复(0)
#include <stdio.h>

int main()
{
    int n,m;
    scanf("%d %d",&n,&m);
    int arr[100][100];
    int arr1[100][100];
    double sum = 0;
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<m;j++)
        {
            scanf("%d",&arr[i][j]);

        }
    }
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<m;j++)
        {
            scanf("%d",&arr1[i][j]);
            if(arr1[i][j]==arr[i][j])
            sum++;
        }
    }
    printf("%.2lf",sum/(n*m)*100);
    return 0;
}

发表于 2023-11-27 16:44:42 回复(0)
#include <stdio.h>

int main() {
   int m,n;
   scanf("%d %d",&m,&n);
   int arr1[101][101],arr2[101][101];
   int i,j;
   int br = m>n?m:n;
   int sr = m>n?n:m;
   for(i=0;i<m;i++){
        for(j=0;j<m;j++){
            scanf("%d",&arr1[i][j]);
        }
   }
   for (i = 0; i <n ; i++) {
        for (j = 0; j < n; j++) {
            scanf("%d", &arr2[i][j]);
        }
    }
int count=0;
for(i=0;i<sr;i++){
    for(j=0;j<sr;j++){
        if(arr1[i][j]==arr2[i][j]){
            count++;
        }
    }
}
printf("%.2f",100.00*count/(br*br));
    return 0;
}
发表于 2023-11-20 22:29:56 回复(0)
#include <stdio.h>
int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
    int i,count = 0;
    int arr[m][n],aee[m][n];
    for(i=0;i<m;i++)
    {
        int j;
        for(j=0;j<n;j++)
        {
            scanf("%d ",arr[i]+j);
        }
    }
    for(i=0;i<m;i++)
    {
        int j;
        for(j=0;j<n;j++)
        {
            scanf("%d ",aee[i]+j);
            if(arr[i][j] == aee[i][j])
            {
                count++;
            }
        }
    }
    float ext = 0.0;
    ext = 100.0*count/(n*m);//百分比,别忘了,乘以100.0
    printf("%.2f",ext);
    return 0;
}

发表于 2023-11-11 10:32:52 回复(0)
#include <stdio.h>

int main()
{
    int n,m;
    scanf("%d %d",&n,&m);
    int arr1[n][m];
    int arr2[n][m];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            scanf("%d",&arr1[i][j]);
        }
    }
     for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            scanf("%d",&arr2[i][j]);
        }
    }
    float count=0;//创建计数器
    for(int i=0;i<n;i++)
    {

        for(int j=0;j<m;j++)
        {
            if(arr1[i][j]==arr2[i][j])//每次相等就++
            count++;
        }
    }
    float k = (count * 100) / (n * m);
    printf("%.2f",k);
    return 0;
}
发表于 2023-04-13 13:31:12 回复(0)
#include <stdio.h>
int main()
{
    int n = 0,m = 0,count = 0;
    double percent = 0.;
    int arr[106][106] = {0};
    int arr2[106][106] = {0};
    scanf("%d%d",&n,&m);
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<m;j++)
        {
            scanf("%d",&arr[i][j]);//输入
        }
    }
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<m;j++)
        {
            scanf("%d",&arr2[i][j]);//输入
        }
    }
    for(int i = 0;i<n;i++)
    {
        for(int j = 0;j<m;j++)
        {
            if(arr[i][j]==arr2[i][j])//记录相同
                count++;
        }
    }
    percent = (double)count/(n*m)*100;//计算百分比
    printf("%.2lf",percent);
    return 0;
}

发表于 2023-03-18 09:35:05 回复(0)
#include <stdio.h>
#include <stdlib.h>

int main() {
    int m, n;
    int sum = 0;
    int count = 0;
    scanf("%d %d", &n, &m);
    sum = n * m;

    int* a1 = (int*)malloc(sizeof(int) * sum);
    int* a2 = (int*)malloc(sizeof(int) * sum);

    int i = 0;
    for (i = 0; i < sum; i++) {
        scanf("%d", &a1[i]);
    }
    for (i = 0; i < sum; i++) {
        scanf("%d", &a2[i]);
        if (a1[i] == a2[i]) {
            count++;
        }
    }

    printf("%.2f", (count / (float)sum)*100);
    return 0;
}

发表于 2023-03-14 11:18:31 回复(0)
#include <stdio.h>

int main() {
    int n,m,p=0;
    scanf("%d %d",&n,&m);
    int a[n][m],b[n][m];
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            scanf("%d ",&a[i][j]);
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            scanf("%d ",&b[i][j]);
        }
    }for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if (a[i][j]==b[i][j]) {
                p++;
            }
        }
    }
    printf("%.2f",(1.0*p)/(n*m)*100);
    return 0;
}
发表于 2023-01-31 11:34:00 回复(0)
#include<stdio.h>
int main() {
    int arr[100][100] = {0};
    int input = 0, n, m, count = 0;
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
            scanf("%d", &arr[i][j]);
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &input);
            if (input == arr[i][j])
                count++;
        }
    }
    float ret = (1.0 * count / (n * m) * 1.0) * 100;
    printf("%.2f\n", ret);
    return 0;
}

发表于 2022-08-04 19:56:08 回复(0)
#include <stdio.h>
int main(){
    int n, m;
    scanf("%d %d", &n, &m);
    float c = 0, s = n*m;
    int a1[n][m], a2[n][m];
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++)
            scanf("%d", &a1[i][j]);
    }
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++)
            scanf("%d", &a2[i][j]);
    }
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(a1[i][j] == a2[i][j])
                c++;
        }
    }
    printf("%.2f", c/s*100);
    return 0;
}

发表于 2022-07-27 10:51:09 回复(0)
#include<stdio.h>
int main(){
    int n,m,x,i,j,count=0;
    scanf("%d %d",&n,&m);
    x=n*2;
    int a[x][m];
    for(i=0;i<x;i++){
        for(j=0;j<m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            if(a[i][j]==a[i+n][j]){
                count++;
            }
        }
    }
    printf("%.2f",(count*1.0)/(n*m)*100);
}
发表于 2022-07-25 17:08:27 回复(0)
#include <stdio.h>

int main(){
    int n, m, arr[10][10];
    int x, count = 0;
    scanf("%d %d", &n, &m);
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++)
            scanf("%d", &arr[i][j]);
    }
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            scanf("%d", &x);
            if(x == arr[i][j])
                count++;
        }
    }
    printf("%.2f", (float)count / (n * m) * 100);
    return 0;
}

发表于 2022-06-08 20:59:02 回复(0)
#include<stdio.h>
int main()
{
    int m,n;
    int arr1[100][100]={0};
    int arr2[100][100]={0};
    int sum=0;
    double resem=0;
    scanf("%d%d",&m,&n);
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            scanf("%d",&arr1[i][j]);
        }
    }
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            scanf("%d",&arr2[i][j]);
            if(arr1[i][j]==arr2[i][j])
            {
                sum++;
            }
        }
    }
    resem=((sum+0.0)/(n*m))*100;
    printf("%.2f\n",resem);
    return 0;
}

发表于 2022-04-28 22:04:43 回复(0)
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int n=0,m=0,sum=0;
    scanf("%d %d",&n,&m);
    int**p1=(int**)malloc(n*sizeof(int*));
    int**p2=(int**)malloc(n*sizeof(int*));
    for(int i=0;i<n;i++)
    {
        p1[i]=malloc(m*sizeof(int));
        p2[i]=malloc(m*sizeof(int));
    }
    for(int i=0;i<n;i++)//第一个矩阵输入
    {
        for(int k=0;k<m;k++)
        {
            scanf("%d",*(p1+i)+k);
        }
        getchar();
    }
    for(int i=0;(i<n);i++)//第二个矩阵输入
    {
        for(int k=0;(k<m);k++)
        {
            scanf("%d",*(p2+i)+k);
            if(p1[i][k]==p2[i][k])
                sum++;
        }
        getchar();
    }
    printf("%.2f\n",100*((float)sum)/(n*m));
    for(int i=0;i<n;i++)
    {
        free(p1[i]);
        p1[i]=NULL;
        free(p2[i]);
        p2[i]=NULL;
    }
    free(p1);
    p1=NULL;
    free(p2);
    p2=NULL;
    return 0;
}

发表于 2022-03-09 10:23:21 回复(0)
#include<stdio.h>
int main(){
    int m,n,i,j,count=0;
    scanf("%d %d",&m,&n);
    int a[m][n],b[m][n];
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            scanf("%d",&b[i][j]);
        }
    }
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            if(a[i][j]==b[i][j]){
                count++;
            }
        }
    }
    printf("%.2f",(float)count/(m*n)*100);
}

发表于 2022-02-26 20:25:22 回复(0)