Python计算机视觉编程 - 第一章 图像处理基础 -实例测试

在安装和配置完pycharm+OpenCV后,我进行了一些实例的测试。
使用PIL-Python图像库、Matplotlib库、NumPy库、SciPy模块分别尝试了两个例子。

1.1PIL-Python图像库

1.1.1 显示图像

from PIL import Image
from pylab import *
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
figure()

pil_im = Image.open('2.jpg')
gray()
subplot(121)
title(u'原图',fontproperties=font)
axis('off')
imshow(pil_im)

pil_im = Image.open('2.jpg').convert('L')
subplot(122)
title(u'灰度图',fontproperties=font)
axis('off')
imshow(pil_im)

show()

Python计算机视觉编程 - 第一章 图像处理基础 -实例测试_第1张图片
运用上述代码,可以读入一幅图,及其灰度图像。

1.1.2 对图片进行拷贝粘贴、缩略、尺寸调整、旋转变换

from PIL import Image
from pylab import *
from PIL import Image
from pylab import *
#添加中文字体支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
figure()

#显示原图

pil_im = Image.open('2.jpg')
print (pil_im.mode, pil_im.size, pil_im.format)
subplot(231)
title(u'原图', fontproperties=font)
axis('off')
imshow(pil_im)

#拷贝粘贴区域

box = (2000,100,3000,1100)
region = pil_im.crop(box)
region = region.transpose(Image.ROTATE_180)
pil_im.paste(region,box)
subplot(232)
title(u'拷贝粘贴区域', fontproperties=font)
axis('off')
imshow(pil_im)

#缩略图

pil_im = Image.open('2.jpg')
size = 128, 128
pil_im.thumbnail(size)
print (pil_im.size)
subplot(233)
title(u'缩略图', fontproperties=font)
axis('off')
imshow(pil_im)
pil_im.save('test21.jpg') #保存缩略图

#调整图像尺寸

pil_im = pil_im.resize(size)
print (pil_im.size)
subplot(234)
title(u'调整尺寸后的图像', fontproperties=font)
axis('off')
imshow(pil_im)

#旋转图像45°

pil_im = pil_im.rotate(45)
subplot(235)
title(u'旋转45°后的图像', fontproperties=font)
axis('off')
imshow(pil_im)
show()

Python计算机视觉编程 - 第一章 图像处理基础 -实例测试_第2张图片

运用上述代码,完成了原图显示、拷贝粘贴区域、生成缩略图、调整图像尺寸、图像旋转变换的效果。

1.2Matplotlib库

1.2.1图像轮廓和直方图

#-*- coding: utf-8 -*

from PIL import Image
from pylab import *

#添加中文字体支持

from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
im = array(Image.open('2.jpg').convert('L')) # 打开图像,并转成灰度图像
figure()
subplot(121)
gray()
contour(im, origin='image')
axis('equal')
axis('off')
title(u'图像轮廓', fontproperties=font)
subplot(122)
hist(im.flatten(), 128)
title(u'图像直方图', fontproperties=font)
plt.xlim([0,260])
plt.ylim([0,300000])
show()

Python计算机视觉编程 - 第一章 图像处理基础 -实例测试_第3张图片
通过上述代码可以得到图像轮廓图和图像直方图,通过直方图我们可以看出,这张图的明亮对比很明显,嗯,拍的不错。

1.2.2 交互注释

from PIL import Image
from pylab import *
im = array(Image.open('2.jpg'))
imshow(im)
print ('Please click 3 points')
imshow(im)
x = ginput(3)
print ('You clicked:', x)
show()

Python计算机视觉编程 - 第一章 图像处理基础 -实例测试_第4张图片
有时,用户需要和应用进行交互,比如在图像中用点做标识,或者在一些训练数据中进行注释。PyLab提供了一个很简洁好。用的函数ginput(),它可以完成该任务。但一开始点击图像无法确定坐标,在设置中进行下述更改后
“Settings | Tools | Python Scientific | Show Plots in Toolwindow,去掉对勾”得到我随机取的三个点的坐标值
在这里插入图片描述

1.3 NumPy库

1.3.1灰度变换

#-*- coding: utf-8 -*

from PIL import Image
from numpy import *
from pylab import *
im = array(Image.open('2.jpg').convert('L'))
print (int(im.min()), int(im.max()))
im2 = 255 - im # invert image
print (int(im2.min()), int(im2.max()))
im3 = (100.0/255) * im + 100 # clamp to interval 100...200
print (int(im3.min()), int(im3.max()))
im4 = 255.0 * (im/255.0)**2 # squared
print (int(im4.min()), int(im4.max()))
figure()
gray()
subplot(1, 3, 1)
imshow(im2)
axis('off')
title(r'$f(x)=255-x$')
subplot(1, 3, 2)
imshow(im3)
axis('off')
title(r'$f(x)=\frac{100}{255}x+100$')
subplot(1, 3, 3)
imshow(im4)
axis('off')
title(r'$f(x)=255(\frac{x}{255})^2$')
show()

Python计算机视觉编程 - 第一章 图像处理基础 -实例测试_第5张图片
上面左边灰度变换函数采用的是f(x)=255-x,中间采用的是f(x)=(100/255)x+100,右边采用的是变换函数是
f(x)=255(x/255)^2。运行上面代码,得到上述结果。

1.3.2直方图均衡化

在切换到PIL的安装目录后通过“python setup.py install”将PIL库安装完成

#-*- coding: utf-8 -*

from PIL import Image
from pylab import *
from PCV.tools import imtools

#添加中文字体支持

from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
im = array(Image.open('2.jpg').convert('L')) # 打开图像,并转成灰度图像
im2, cdf = imtools.histeq(im)
figure()
subplot(2, 2, 1)
axis('off')
gray()
title(u'原始图像', fontproperties=font)
imshow(im)
subplot(2, 2, 2)
axis('off')
title(u'直方图均衡化后的图像', fontproperties=font)
imshow(im2)
subplot(2, 2, 3)
axis('off')
title(u'原始直方图', fontproperties=font)
hist(im.flatten(), 128, normed=True)
subplot(2, 2, 4)
axis('off')
title(u'均衡化后的直方图', fontproperties=font)
hist(im2.flatten(), 128, normed=True)
show()

Python计算机视觉编程 - 第一章 图像处理基础 -实例测试_第6张图片
通过上述代码,展现了图像直方图均衡化的前后对比,可以看到图像的灰度值明显变得均匀了许多。

1.4 SciPy模块

通过在pycharm的available packages添加
在这里插入图片描述
安装成功。

1.4.1图像模糊

#-*- coding: utf-8 -*

from PIL import Image
from pylab import *
from scipy.ndimage import filters

#添加中文字体支持

from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
im = array(Image.open('2.jpg').convert('L'))
figure()
gray()
axis('off')
subplot(1, 4, 1)
axis('off')
title(u'原图', fontproperties=font)
imshow(im)
for bi, blur in enumerate([2, 5, 10]):
	im2 = zeros(im.shape)
	im2 = filters.gaussian_filter(im, blur)
	im2 = np.uint8(im2)
	imNum=str(blur)
	subplot(1, 4, 2 + bi)
	axis('off')
	title(u'标准差为'+imNum, fontproperties=font)
	imshow(im2)
show()

Python计算机视觉编程 - 第一章 图像处理基础 -实例测试_第7张图片
将灰度图像进行高斯模糊后的结果。彩色的还没弄完,以后再补上。

1.4.2图像差分

#-*- coding: utf-8 -*

from PIL import Image
from pylab import *
from scipy.ndimage import filters
import numpy

/# 添加中文字体支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
im = array(Image.open('2.jpg').convert('L'))
gray()
subplot(1, 4, 1)
axis('off')
title(u'(a)原图', fontproperties=font)
imshow(im)

#Sobel derivative filters

imx = zeros(im.shape)
filters.sobel(im, 1, imx)
subplot(1, 4, 2)
axis('off')
title(u'(b)x方向差分', fontproperties=font)
imshow(imx)
imy = zeros(im.shape)
filters.sobel(im, 0, imy)
subplot(1, 4, 3)
axis('off')
title(u'(c)y方向差分', fontproperties=font)
imshow(imy)
#mag = numpy.sqrt(imx**2 + imy**2)
mag = 255-numpy.sqrt(imx**2 + imy**2)
subplot(1, 4, 4)
title(u'(d)梯度幅度', fontproperties=font)
axis('off')
imshow(mag)
show()

Python计算机视觉编程 - 第一章 图像处理基础 -实例测试_第8张图片
将图像进行x方向差分、y方向差分、梯度幅度差分后的结果。
代码来源:http://yongyuan.name/pcvwithpython/

你可能感兴趣的:(计算机视觉)