前言
在大数据流行的今天,对数据的处理以及分析都成了至关重要的方面。二我们这节所要学的就是对图片的处理。利用代码去处理一些图片。以及认识图片的本质。
图片的马赛克
我们都知道,在生活中我们有时候为了不暴露我们的信息。照片有时就会用马赛克的方式来隐藏我们的基本面貌信息。虽然现在手机推出了很多的软件可以对图片进行马赛克处理,但是大多数的软件马赛克都是已经设定好的,无法更改他们的值。而今天我们就可以用到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')