Python数据分析与挖掘————图像的处理

news2025/3/12 9:36:27

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 图片的马赛克
      • 一.安装matplotlib,numpy等模块
      • 二.马赛克图片
          • 一.导入图片
          • 二.定位区域
          • 三.图片的合成
      • 图片拼接
      • 图像的灰度化
          • 一.max()方法
          • 二.min()方法
          • 三.平均值法mean()函数
          • 四.加权平均值法
      • 图片的分割
  • 总结
    • 源代码


前言

在大数据流行的今天,对数据的处理以及分析都成了至关重要的方面。二我们这节所要学的就是对图片的处理。利用代码去处理一些图片。以及认识图片的本质。

图片的马赛克

我们都知道,在生活中我们有时候为了不暴露我们的信息。照片有时就会用马赛克的方式来隐藏我们的基本面貌信息。虽然现在手机推出了很多的软件可以对图片进行马赛克处理,但是大多数的软件马赛克都是已经设定好的,无法更改他们的值。而今天我们就可以用到Python中的matplotlib模块来实现图片的马赛克。

一.安装matplotlib,numpy等模块

python的编写有人用的时VS code,也有pycharm编译器。这里介绍vs code编译器。
一.按住win+R键,打开控制端,输入cmd命令;
在这里插入图片描述
二.在打开的用户控制界面输入pip install [模块]命令;
在这里插入图片描述
如上图一样,将需要下载的模块输入,下载成功后就可以使用模块。而对于使用pycharm编译器的同学,就打开pycharm的终端,输入pip install [模块]
就可以了。
三.使用模块
我们主要使用的时matplotlib中的image,故我们导入模块;

import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt

导入模块后,我们就可以进行图片的处理了.

二.马赛克图片

一.导入图片

matplotlib.image中的imread()函数就是用来读取图片的编码的。我们可以提前将要使用的图片放在该目录下,也可直接导入,这里博主就使用上次爬虫得到的图片。具体的图片你自己根据自己的情况来定
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg') #导入图片,解码
在这里插入图片描述
我们打印一下他的值,我们会发现图片解码后就是一个三维数组。而我们对他的操作都是这个数组的操作。

二.定位区域

我们对需要打马赛克的位置进行定位,(imshow()函数
在这里插入图片描述
我们会发现我们导入的图片的周围出现了刻度,我们可以根据他上面的刻度来估计我们要进行打码的位置。找到打码的位置后,进行切割;
data1=data_jpg[50:320,150:350]
在这里插入图片描述
然后我们就会得到一个经过切割过的图片。我们现在就对这张图片进行像素进行细分割。
data1=data1[::27,::40]根据自己的需要,定义分割的值,这里就表示了把图片的像素以27(y轴),40(x轴)的间隔进行切割为一个像素。就会形成马赛克。
在这里插入图片描述

三.图片的合成

最后将上面已经马赛克化的图片区域拷贝到原图片中就可以了;

for i in range(10):
    for j in range(5):
        data2[50+27*i:50+27+27*i,150+40*j:150+40+40*j]=data1[i,j]

最后,将图片显示出来就可以了,如果需要保存,就使用savefig()函数即可;
现在我们来看看最后的效果;
在这里插入图片描述
源代码展示;

import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
#plt.imshow(data_jpg)
#马赛克;
data2=data_jpg.copy()
data1=data_jpg[50:320,150:350]
#plt.imshow(data1)
data1=data1[::27,::40]
#plt.imshow(data1)
for i in range(10):
    for j in range(5):
        data2[50+27*i:50+27+27*i,150+40*j:150+40+40*j]=data1[i,j]
plt.imshow(data2)

图片拼接

python中队图片的处理,除了可以打马赛克,还可以对其进行变色,虚拟化,灰图像处理,图片拼接等功能;
concatenate()函数
图片的拼接就是用concatenate()函数实现;
在这里插入图片描述

import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
data3=np.concatenate([data_jpg,data_jpg],axis=1)
plt.imshow(data3)

图像的灰度化

一.max()方法

上文提到的,图片的组成就是一个三维数组,其中的数字代表了他们的图像特点。所以,图像的灰度化,也就可以通过改变他们的位置,值,维度来改变图片的颜色,形状.
我们可以看下面的例子;

import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
print(data_jpg)
[[[215 221 211]
  [215 221 211]
  [215 221 211]
  ...
  [204 189 182]
  [203 188 181]
  [202 187 180]]

 [[215 221 211]
  [215 221 211]
  [215 221 211]
  ...
  [204 189 182]
  [203 188 181]
  [202 187 180]]

 [[215 221 211]
  [215 221 211]
  [215 221 211]
  ...
  [204 189 182]
  [203 188 181]
  [201 186 179]]

 ...
...
  ...
  [188 150 137]
  [189 151 138]
  [189 151 138]]]
data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
#最大值法;
s=np.max(data_jpg,axis=-1)#axis取-1就是为了得到最里面的值;
plt.imshow(s,cmap='gray') #cmap参数表示最后的颜色,gray时灰色;

效果展示;
在这里插入图片描述

二.min()方法

和max()方法相似,所以这里不做过多的介绍,就直接粘贴代码;

data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
sss=np.min(data_jpg,axis=-1)
plt.imshow(sss,cmap='gray')
三.平均值法mean()函数
data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
#最大值法;
s=np.max(data_jpg,axis=-1)
plt.imshow(s,cmap='gray')

效果展示;
在这里插入图片描述
和上面的方法所得出的效果基本相似。所以,掌握其中一种方法即可.

四.加权平均值法

和平均值法不一样的是,加权平均值法可以根据自己给的数据不同的灰度化;

data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
weight=[0.01,0.01,0.01]  #这里的值自己更改,值越大,灰度化颜色偏深,反之则偏浅.
ss=np.dot(data_jpg,weight)
plt.imshow(ss,cmap='gray')

在这里插入图片描述

图片的分割

有时候我我们只需要图片其中的一小部分,那我们就可以通过分割函数split()函数来实现;

one,data4,two=np.split(data_jpg,indices_or_sections=[100,400],axis=1) #中间的参数表示我们分割的区间;
plt.imshow(data4)
plt.imshow(one)
plt.imshow(two)

效果展示;

在这里插入图片描述

总结

本节我要介绍的就这些了,对于图片的处理还有很多的方式,这里就先不过多的介绍,后面我会继续更新。利用代码实现图片的处理,会有很大的灵活使用空间,不局限于手机软件的限制,所以掌握这些方式也是有很大的益处.
源代码放在了下面,有兴趣的同学可以看一下.

源代码


import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data=mpimg.imread("./onetemp.jpg")
data1=data.copy()
#打马赛克;
#第一步,找出要打马赛克的位置;
data2=data1[200:900,100:800]
#第二步,将图片比例的收缩;
data2=data2[::35,::35]
print(data2.shape)
datatemp=data1.copy()
#第三步,替换,将现有的替换到原来的,记住两个尺寸不一样;
for i in range(20):
    for j in range(20):
        datatemp[200+35*i:200+35*i+35,100+35*j:100+35*j+35]=data2[i,j]
plt.imshow(datatemp)

#图片的拼接;
data4=np.concatenate([data,data])#axis=1时,并排着;
plt.imshow(data4)
data5=np.concatenate([data,data],axis=1)
plt.imshow(data5)
#图片切割;
one,two,three=np.split(data,indices_or_sections=[400,600],axis=1)
plt.imshow(one)
plt.imshow(two) 
plt.imshow(three)

#图像灰度化;
#第一种方法,最小值法;
data=mpimg.imread('./onetemp.jpg')
#data=np.min(data,axis=-1)
#plt.imshow(data,cmap='gray')
#第二种方法,最小值法;
data1=np.max(data,axis=-1)
#plt.imshow(data1,cmap='gray')
#第三种,平均值法;
data3=np.mean(data,axis=-1)#等价于data.mean()函数;
#plt.imshow(data3,cmap='gray')

#第四种方法,加权平均值法,dot函数;
weight=[0.299,0.345,0.456]
data6=np.dot(data,weight)
plt.imshow(data6,cmap='gray')


data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
print(data_jpg)
#plt.imshow(data_jpg)
#马赛克;
data2=data_jpg.copy()
data1=data_jpg[50:320,150:350]
#plt.imshow(data1)
data1=data1[::27,::40]
#plt.imshow(data1)
for i in range(10):
    for j in range(5):
        data2[50+27*i:50+27+27*i,150+40*j:150+40+40*j]=data1[i,j]
plt.imshow(data2)


#照片的合集;
import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
data3=np.concatenate([data_jpg,data_jpg],axis=1)
plt.imshow(data3)

#图片的切割;
one,data4,two=np.split(data_jpg,indices_or_sections=[100,400],axis=1)
plt.imshow(data4)
#plt.imshow(one)
#plt.imshow(two)

#图像的灰度化;
data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
#最大值法;
s=np.max(data_jpg,axis=-1)
plt.imshow(s,cmap='gray')
#加权平均值法;
data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
weight=[0.31,0.41,0.53]
ss=np.dot(data_jpg,weight)
plt.imshow(ss,cmap='gray')

#平均值法;
smp=np.mean(data_jpg,axis=-1)
plt.imshow(smp,cmap='gray')

#最小值法;
sss=np.min(data_jpg,axis=-1)
plt.imshow(sss,cmap='gray')


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于tauri+vue3.x多开窗口|Tauri创建多窗体实践

最近一种在捣鼓 Tauri 集成 Vue3 技术开发桌面端应用实践,tauri 实现创建多窗口,窗口之间通讯功能。 开始正文之前,先来了解下 tauri 结合 vue3.js 快速创建项目。 tauri 在 github 上star高达53K,而且呈快速增长趋势。相比elect…

DDoS报告团伙规模

攻击资源活跃度分析 在攻击源活时间的监测中发现,和 2019 年趋势一致,存活时间大于 10 天的攻击资源占比 11%。像这种能够长期被控制的肉鸡大部分都是物联网 设备,物联网设备大都存在设备系统老,人员维 护少,更新慢等…

vue当中的事件处理

1.绑定监听v-on 最简单的一个绑定监听的事件 <body><div id"root"><h1>my name is {{name}}</h1><button v-on:click"showInfo">click me</button></div><script type"text/javascript">Vue.…

HotSpot 虚拟机对象探秘-对象的创建、内存布局、访问定位

目录对象的创建检查类的符号引用&#xff0c;是否执行过类的加载过程分配内存指针碰撞&#xff1a;空闲列表&#xff1a;线程安全的问题&#xff0c;对分配内存空间的动作进行同步处理——TLAB初始化虚拟机对对象进行必要的设置&#xff0c;执行构造方法对象的内存布局对象头包…

Spring、MySQL、日期、BigDecimal、集合、反射、序列化中的坑与使用指南

文章目录MySQL中的坑MySQL断开连接Mysql表字段设置为not null如何解决网络瓶颈核心流程的性能查看Spring中的坑与使用注意springboot的配置文件先后顺序定时任务不进行lombok的不适用场景Spring的Bean默认名称生成规则new出来的对象不被Spring所管理SpringBean相关的注解Spring…

Java 类和对象 详解+通俗易懂

文章目录类和对象1. 面对对象的初步认识1.1 什么是面向过程&#xff1f;什么又是面向对象&#xff1f;1.2 对象、成员变量和成员方法的关系和理解2. 类的定义和使用2.1 简单认识类2.2 类的定义格式2.3 小试身手3. 类的实例化3.1 什么是实例化3.2 类和对象的说明4. this 引用4.1…

k8s上部署seata-server集群并注册到nacos上

部署前准备 第一步&#xff1a; 创建seata-server需要的表,有现成的阿里云RDS&#xff0c;就直接在RDS上创建数据库了&#xff0c;方便后面统一管理。 具体的 SQL 参考script/server/db &#xff0c;这里使用的是 MySQL 的脚本&#xff0c;数据库名称为 seata&#xff0c;还需…

对外 API 接口,请把握这3 条原则,16 个小点

对外API接口设计 安全性 1、创建appid,appkey和appsecret 2、Token&#xff1a;令牌&#xff08;过期失效&#xff09; 3、Post请求 4、客户端IP白名单 &#xff08;可选&#xff09; 5、单个接口针对IP限流&#xff08;令牌桶限流&#xff0c;漏桶限流&#xff0c;计数器…

git如何回滚,返回到之前的记录

文章目录1.建立一个reset的测试文件&#xff0c;并连续提交。2.进行回滚测试。2.1测试,回滚到第二次提交2.1.1首先使用git log命令查看commit记录2.1.2查看结果.2.1.3回滚结果提交到远程2.2.你发现自己回滚的多了3.1撤销测试3.1建立文件&#xff0c;多次填写内容上传到git3.2撤…

顺序栈和链栈的定义和使用C语言实现(附有完整代码)

栈的基本内容&#xff1a; 无论是我们接下来要讲的栈还是后面要讲到的队列&#xff0c;他们虽然在名字上不同于我们之前的顺序表或者单链表&#xff0c;但是它们本质也是线性表&#xff0c;只是在基本操作上没有表那么“自由”。比如&#xff1a;栈只能从栈顶进行插入和删除&a…

【Linux】Linux文件权限的理解

&#x1f4ac;推荐一款模拟面试、刷题神器 、从基础到大厂面试题&#xff1a;&#x1f449;点击跳转刷题网站进行注册学习 目录 一、Shell是什么&#xff1f; 1、Shell承担用户和内核间的翻译工作 2、拒绝用户非法请求&#xff0c;保护内核 3、派生子进程执行用户指令 二…

SpringCloud

SpringCloud 三 本章知识点 3.1 项目架构演变 3.1.1 单体应用架构 部署到一个war里 部署到一个web容器里&#xff08;如tomcat&#xff09; 公用一个DB 优点: 容易测试 容易部署缺点&#xff1a; 开发效率低 代码维护难 部署不灵活&#xff08;如构建时间特别长&#xff0…

人工智能轨道交通行业周刊-第19期(2022.10.17-10.23)

本期关键词&#xff1a;首都智慧地铁、AI四小龙、文本生成视频、低光照目标检测、天窗、电务人员 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟V…

四非到保研厦大,我们还有多少路要走----技术人的保研之路

前言&#xff1a; “Hello&#xff0c;大家好我叫是Dream呀&#xff01;”在1024程序员节到来之际&#xff0c;我想和大家一起分享一下技术人生的故事----我的学长2022年从四非保研至厦大的经验和经历&#xff0c;希望大家可以耐心看完&#xff0c;收获技术力量&#xff0c;更加…

Java面试题

1、JDK 、JRE和JVM 的区别&#xff1f; JDK&#xff0c;java development kit java开发工具包&#xff0c;为java程序提供开发和运行环境JRE&#xff0c; java runtime environment java运行环境&#xff0c;为java程序提供必须的运行环境JVM&#xff0c; java virtual mach…

RayVentory以改进IT的分析,RayVentory原始数据之间轻松切换

使用KeyCloak进行SSO(单点登录)-使用单点登录解决方案&#xff0c;并直接与KeyClok交互。 特定于公司的数据丰富—使用产品所有者、价格或许可证信息等信息轻松丰富您的数据&#xff0c;以获得所需数据的综合视图。 用于更深入数据管理的新连接器-添加了许多新连接器&#xff0…

Vue3中 响应式 API ( readonly、shallowReadonly、toRaw、markRaw ) 详解

传送门&#xff1a;Vue3中 响应式 API ( reactive、ref、toRef、toRefs ) 详解 传送门&#xff1a;Vue3中 响应式 API&#xff08; shallowReactive、shallowRef、triggerRef 、customRef &#xff09;详解 1. readonly 函数 接受一个对象 (不论是响应式还是普通的) 或是一个…

深度学习visio作图技巧

目录 1.不显示跨线 2.调节连接线拐弯 3.方框与连接线反应 4.设计一个卷积块/特征图 5.设计一个特征图方块 1.不显示跨线 不显示跨线&#xff1a;设计→连接线&#xff0c;取消显示 跨线的勾选 2.调节连接线拐弯 连接线拐弯&#xff1a;按住shift拖动线条即可控制连接线拐…

高数(下) 第十二章:无穷级数

文章目录Ch12. 无穷级数(一) 常数项级数正项级数交错级数任意项级数4个特殊的常数项级数收敛级数的性质&#xff08;针对任意项级数&#xff09;常数项级数的审敛法1.正项级数审敛法(判别法)(1)比较判别法(2)比较审敛法极限形式(3)比值法(4)根值法(5)收敛的充要条件(6)绝对收敛…

Spring Boot 篇四: Spring Data JPA使用SQL Server

本文目录SQL Server Express的安装或直接DockerSQL Server JDBC DriverTCP/IP 链接端口Integrated SecuritySSL总结本篇介绍篇一至篇三中用到的JPA链接SQL Server的具体情况以及实战过程中可能遇到的问题。 SQL Server Express的安装或直接Docker 具体的下载和安装教程&#…