Python Learing(二):Basic Image Processing 1

2016-11-05 阅读量

<写在前面>

Basic image processing 1:   0.(以简单的曲线图为例)对于生成的图自定义外观,使用子图,多个数据集,标题,标签,交互式标注,图例;   1.生成散点图,直方图;   2.简单的图像处理:转换格式,调整尺寸,旋转,复制粘贴图像区域,在图像上绘制点线;

以上内容主要用了以下几种模块:   0.PIL (Python Image Library   1.NumPy   2.Matplotlib   3.SciPy

无法安装的话,参考这篇文章

其实写这篇文章的时候,我一直在纠结是分模块整理好一些呢,还是将各种模块的功能集于同一个对象进行描述。一开始是尝试着分模块整理的,整理了一段时间发现这样做并不有效,而且提取的实际意义并不大。于是改成同一个对象,如何用python的模板画,这样的方式进行编写。希望之后自己能做一些亦可赛艇的东西丫~

<以下是正文>

生成简单的曲线图,并进行基础处理

生成简单的曲线图


import matplotlib.pyplot as plt       #用matplotlib中的plt.plot画线
import numpy as np                #用numpy         
x = np.linspace(0,2np.pi, 50)         #np.linspace定义参数:将在[0,2π]区间生成包含50个元素的数组
y = np.sin(x)                          #使用np.sin(),生成一个正弦函数
plt.plot(x, y)                         #使用plt.plot( , )画线 
plt.show()
生成了默认定义的sinx曲线 原图

自定义外观

参考官网:自定义外观的相关文章 例如: 将上面的plt.plot语句改为 plt.plot(x, y, ‘r-o’)
# r:红色;-o:实心点 原图

使用多个数据集

在plt.plot定义多个点即可 如定义两个数据集 plt.plot(x, np.sin(x) , ‘r’, x, np.cos(x), ‘g’)

使用子图

使用 plt.subplot(x, y, z):x定义横向长度为相对的1/x,y定义纵向长度为相对的1/y,z定义所在的是哪个区域

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 np.pi, 50)
y = np.sin(x)
plt.subplot(2 , 1, 1)
plt.plot(x, y) z = np.cos(x) plt.subplot(2, 1 , 2) plt.plot(x, z) plt.show()
原图

显示标题,标签,图例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 50)         
plt.legend()                                              #显示图例
plt.title('Sin and Cos Waves')                            #显示标题
plt.plot(x, np.sin(x), 'r-o', label='Sin(x)')             #注明图例
plt.plot(y, np.cos(x), 'g-^', label='Cos(x)')               
plt.xlabel('x')                                           #显示x标签
plt.ylabel('y')
plt.show()
原图

使用交互式标注

python
from PIL import Image
from pylab import *

im = array(Image.open('a.jpg'))
imshow(im)
print 'Please click 1 point'
x = ginput(1)
print 'you clicked: ',x
show()

生成直方图,散点图等基础图像

直方图

python
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(1000)
plt.hist(x, 50)                       #给hist()函数传入一个包含数据的数组,以及代表数据容器的个数
plt.show()
原图

散点图

曲线波形图

python
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
plt.scatter(x, y)
plt.show()

彩色映射随机散点图

python
import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(1000)
y = np.random.rand(1000)
size = np.random.rand(1000) *50
colour = np.random.rand(1000)
plt.scatter(x, y, size, colour)
plt.colorbar()
plt.show()
原图

简单图像处理

运用PIL库

from PIL import Image

#转换格式
im2.save('/python test/image_test/a.jpg', 'jpeg')

#调整尺寸
out = pil_im.resize((100, 100))

#旋转(默认逆时针)
out = pil_im.rotate(45)

#复制粘贴
a = (100, 100, 400, 400)
region = pil_im.crop(a)

pil_im.paste(region, a)

在图像上绘制点线

from PIL import Image
from pylab import *

im = array(Image.open('night2.jpg'))
imshow(im)
x = [100, 100, 400, 400, 20, 60]                    #选取任意个数的点
y = [200, 500, 200, 500, 30, 30]
plot(x, y , 'r-^')
plot(x[:5], y[:5])                              #按顺序,依次连接前5个点
show()

原图