python实战实例:图像相似度旋转模糊处理

news/2024/9/15 3:42:57 标签: python, 开发语言, 学习, 矩阵

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
python">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
python">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度后矩阵元素的下标:
python">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
python">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() 

 解析:

  • 定义两个矩阵,一个原矩阵,一个新矩阵
  • 首先判断是否首行、末行、首列、末列,如果是,值不变。
  • 如果不是,求出该元素及其上下左右相邻四个像素点原灰度值的平均值覆盖原值。
  • 输出新矩阵即可。

矩阵啦~


http://www.niftyadmin.cn/n/5633308.html

相关文章

岩石检测检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

岩石检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

机器学习数学公式推导之高斯分布

文章目录 1、介绍引入1.1 频率派的观点1.2 贝叶斯派的观点1.3 小结 2、数学基础2.1 二阶中心矩2.2 样本方差2.3 高斯分布2.3.1 一维情况 MLE2.3.2 多维情况 本文参考 B站UP: shuhuai008 跳转 🌹🌹 1、介绍引入 在统计学和概率论中, P ( x ∣ …

JAVAEE初阶第二节——多线程基础(中)

系列文章目录 JAVAEE初阶第二节——多线程基础(中) 多线程基础(中) 多线程带来的的风险-线程安全 (重点)synchronized 关键字volatile 关键字wait 和 notify 文章目录 系列文章目录JAVAEE初阶第二节——多线程基础(中) 多线程基础(中)一.多线程带来的的风险-线程安全 (重点)1…

【深度学习与NLP】——深度卷积神经网络AlexNet

目录 一、卷积神经网络的发展历程 二、简要介绍 三、代码实现 四、缺点和过时的地方 一、卷积神经网络的发展历程 早期理论基础阶段(20 世纪 60 年代 - 80 年代): 1968 年,Hubel 和 Wiesel 通过对猫视觉神经的研究&#xff0…

python网络爬虫(二)——数据的清洗与组织

学会了网络爬虫发送请求后,我们可以获得一段目标的HTML代码,但是还没有把数据提取出来,接下来需要进行数据的清洗与组织。 for item in data:result{title:item.get_test(),link:item.get(href)}print(result)首先明确要提取的数据是标题和链…

Java基础(6)- Java代码笔记3

目录 一、二维数组 1.二维数组定义 a.动态初始化 b.静态初始化 c.简单静态初始化 2.获取数组长度 二、方法 1.无参无返回值方法 2.有参无返回值方法 3.无参有返回值方法 4.有参有返回值方法 5.形式参数和实际参数 6.三层架构思想 7.方法注意事项 8.数组作为方法…

【智能排班系统】Hibernate Validator 参数校验

🎯导读:本文档介绍了参数校验的重要性及其在软件开发中的作用,强调了数据完整性、安全性、用户体验、系统稳定性及开发效率等方面的关键价值。文档详细阐述了Hibernate Validator这一流行的Java验证框架的使用方法,展示了如何利用…

全面解读LSC局域网屏幕监控软件:功能、优势与应用场景一网打尽!

在信息化高速发展的今天,企业管理的效率和精准度成为决定竞争力的关键因素。 LSC局域网屏幕监控软件(LAN Screen Capture),作为安企神推出的一款专为现代企业量身打造的超级局域网监控管理软件,以其强大的功能和灵活的…