听说了很多的大牛的成长历程都从写自己的博客开始
虽然很久之前就开了博客但是没有坚持下去,让自己养成这样的习惯。学着写博客、学着分享。
每天尽量发一篇文章、其他学习文章随着学习进度慢慢写
由于湖湘杯里面出了好几道关于图片的题目,因此几天对于python处理进行简单学习
首先python中可以调用PIL对图像进行基本操作
*PIL是什么
PIL(Python Imaging Library ,即python图像处理类库)提供了通用的图像处理功能以及大量基本图象操作比如缩放、旋转裁剪等
首先操作打开图片、存储图片
from PIL import Image
img = Image.open('demo.jpg')
img.save('test.jpg')
调整图片尺寸和旋转图片
from PIL import Image
img = Image.open('demo.jpg')
img = img.resize((100,200))
img = img.rotate(90)
img.save('test.jpg')
使用Matplotlib对图片进行基本操作
Matplotlib 可以绘制出较好的条形图、饼状图、散点图等,但是对于大多数计算机视觉应用来说,仅仅需要用到几个绘图命令
from PIL import Image
from pylab import *
#打开图像得到一个PIL图像对象
img = Image.open(demo.jpg")
# 读取图像到数组中
im = array(img)
# 绘制图像
imshow(im)
# 一些点
x = [100,100,400,400]
y = [200,500,200,500]
# 使用红色星状标记绘制点
plot(x,y,'r*')
# 绘制连接前两个点的线
plot(x[:2],y[:2])
# 添加标题,显示绘制的图像
title('Plotting: "Test.jpg"')
show()
这里面show()会首先打开一个GUI,
然后新建一个图像窗口。该图形用户界面会循环阻断脚本,然后暂停,直到最后一个图像窗口关闭。在每个脚本里,你只能调用一次 show() 命令,而且通常是在脚本的结尾调用。
也可以使用axis(‘off’)命令使坐标轴不显示。
在绘图时,有很多选项可以控制图像的颜色和样式。
如:
plot(x,y) #默认为蓝色实线
plot(x,y,'r*') #红色星状标记
plot(x,y,'go-') #带有圆圈标记的绿线
plot(x,y,'ks:') #带有正方形标记的黑色虚线
标记 | 颜色 |
---|---|
‘b’ | 蓝色 |
‘g’ | 绿色 |
‘r’ | 红色 |
‘c’ | 青色 |
‘m’ | 品红 |
‘y’ | 黄色 |
‘k’ | 黑色 |
‘w’ | 白色 |
标记 | 线型 |
---|---|
‘-‘ | 实线 |
‘–’ | 虚线 |
‘:’ | 点线 |
标记 | 形状 |
---|---|
‘.’ | 点 |
‘o’ | 圆圈 |
’s’ | 正方形 |
‘*’ | 星形 |
‘+’ | 加号 |
‘x’ | 叉号 |
使用Matplotlib绘制图像轮廓
绘制图像的轮廓(或者其他二维函数的等轮廓线)在工作中非常有用。因为绘制轮廓需要对每个坐标 [x, y] 的像素值施加同一个阈值,所以首先需要将图像灰度化,之后使用contour获得轮廓图像
# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
# 读取图像到数组中,并灰度化
im = array(Image.open('demo.jpg').convert('L'))
#显示时抛弃颜色信息
gray()
# 显示轮廓图像
contour(im, origin='image')
# 在原点的左上角显示
axis('equal')
#关闭坐标轴
axis('off')
show()
其他的还会使用numpy直接操作图像数组来达到操作图像的目的,使用scipy完成更多更复杂的计算。后续再更新~