python采用计算机视觉库pcv,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()

6c1555302777729326ca3efa0910d9ec.png

运用上述代码,可以读入一幅图,及其灰度图像。

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()

6c1555302777729326ca3efa0910d9ec.png

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

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()

6c1555302777729326ca3efa0910d9ec.png

通过上述代码可以得到图像轮廓图和图像直方图,通过直方图我们可以看出,这张图的明亮对比很明显,嗯,拍的不错。

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()

6c1555302777729326ca3efa0910d9ec.png

有时,用户需要和应用进行交互,比如在图像中用点做标识,或者在一些训练数据中进行注释。PyLab提供了一个很简洁好。用的函数ginput(),它可以完成该任务。但一开始点击图像无法确定坐标,在设置中进行下述更改后

“Settings | Tools | Python Scientific | Show Plots in Toolwindow,去掉对勾”得到我随机取的三个点的坐标值

6c1555302777729326ca3efa0910d9ec.png

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−xf(x)=255-xf(x)=255−x’)

subplot(1, 3, 2)

imshow(im3)

axis(‘off’)

title(r’f(x)=100255x+100f(x)=\frac{100}{255}x+100f(x)=255100​x+100’)

subplot(1, 3, 3)

imshow(im4)

axis(‘off’)

title(r’f(x)=255(x255)2f(x)=255(\frac{x}{255})^2f(x)=255(255x​)2’)

show()

6c1555302777729326ca3efa0910d9ec.png

上面左边灰度变换函数采用的是f(x)=255-x,中间采用的是f(x)=(100/255)x+100,右边采用的是变换函数是

f(x)=255(x/255)^2。运行上面代码,得到上述结果。

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()

6c1555302777729326ca3efa0910d9ec.png

通过上述代码,展现了图像直方图均衡化的前后对比,可以看到图像的灰度值明显变得均匀了许多。

1.4 SciPy模块

通过在pycharm的available packages添加

6c1555302777729326ca3efa0910d9ec.png

安装成功。

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()

6c1555302777729326ca3efa0910d9ec.png

将灰度图像进行高斯模糊后的结果。彩色的还没弄完,以后再补上。

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’©y方向差分’, fontproperties=font)

imshow(imy)

#mag = numpy.sqrt(imx2 + imy2)

mag = 255-numpy.sqrt(imx2 + imy2)

subplot(1, 4, 4)

title(u’(d)梯度幅度’, fontproperties=font)

axis(‘off’)

imshow(mag)

show()

6c1555302777729326ca3efa0910d9ec.png

将图像进行x方向差分、y方向差分、梯度幅度差分后的结果。

代码来源:http://yongyuan.name/pcvwithpython/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值