Python计算机视觉——图像处理基础
Python计算机视觉——图像处理基础
-
基础配置
-
-
环境配置
-
- 环境变量设置
- PyCharm相关包导入
-
PIL:Python图像处理类库
-
-
图像处理
-
- 灰度直方图
- 高斯滤波
- 均衡化
-
引用借鉴
基础配置
构造python环境,并使用python语言进行基础图像处理(直方图,高斯滤波、直方图均衡化的结果)
环境配置
环境变量设置

【此电脑】→【右击属性】→【高级系统设置】→【环境变量】→【Path】
其中Path中需要填入bin文件所在目录:【OpenCV-3.4.1】→【build】→【bin】
PyCharm相关包导入

导入会用到的包,防止报错以及不能够运行。
这里导入了pillow等,但不一一截图啦。
PIL:Python图像处理类库
PIL(Python Imaging Library,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图像操作,比如图像缩放、裁剪、旋转、颜色转换等。
代码如下:
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('data/emp.jpg')
print (pil_im.mode, pil_im.size, pil_im.format)
subplot(231)
title(u'原图', fontproperties=font)
axis('off')
imshow(pil_im)
# 显示灰度图
pil_im = Image.open('data/emp.jpg').convert('L')
gray()
subplot(232)
title(u'灰度图', fontproperties=font)
axis('off')
imshow(pil_im)
#拷贝粘贴区域
pil_im = Image.open('data/emp.jpg')
box = (100,100,400,400)
region = pil_im.crop(box)
region = region.transpose(Image.ROTATE_180)
pil_im.paste(region,box)
subplot(233)
title(u'拷贝粘贴区域', fontproperties=font)
axis('off')
imshow(pil_im)
# 缩略图
pil_im = Image.open('data/emp.jpg')
size = 128, 128
pil_im.thumbnail(size)
print (pil_im.size)
subplot(234)
title(u'缩略图', fontproperties=font)
axis('off')
imshow(pil_im)
pil_im.save('thumbnail.jpg') #保存缩略图
# 调整图像尺寸
pil_im = Image.open('data/emp.jpg')
pil_im = pil_im.resize(size)
print (pil_im.size)
subplot(235)
title(u'调整尺寸后的图像', fontproperties=font)
axis('off')
imshow(pil_im)
# 旋转图像45°
pil_im = Image.open('data/emp.jpg')
pil_im = pil_im.rotate(45)
subplot(236)
title(u'旋转45°后的图像', fontproperties=font)
axis('off')
imshow(pil_im)
show()
图像处理
灰度直方图
图像直方图(histogram)是图像的统计学特征,常用于了解图像的基本特征以便分析。不过图像的直方图不具有空间特征。
图像直方图为反映一幅图像中各灰度级与各灰度级像素出现的频率之间的关系图。
直方图的绘制是一个统计的过程,首先得到一张图片的灰度矩阵,接着将灰度值分为若干区间,统计每个灰度区间的像素数量,最后统计完图片中的所有像素即得到该图像的直方图。
图像的灰度直方图(histogram),就是将图像转化成灰度图像之后,统计各个像素点的灰度值,绘制成直方图,其横轴是灰度值(0,255),纵轴是该灰度值所对应的像素的数目。对灰度直方图做积分=图像的size。
# encoding:utf-8
from PIL import Image
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
im = array(Image.open('D:/daima/001/renwu.jpg').convert('L'))
figure()
subplot(121)
gray()
contour(im, origin='image')
axis('equal')
axis('off')
title(u'图像轮廓')
subplot(122)
hist(im.flatten(), 128)
title(u'图像直方图')
plt.xlim([0, 260])
plt.ylim([0, 11000])
show()

高斯滤波
高斯滤波主要用于对图像的降噪,处理过程中图像每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
高斯模糊实质上就是一种均值模糊,只是高斯模糊是按照加权平均的,距离越近的点权重越大,距离越远的点权重越小。
通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
# encoding:utf-8
from PIL import Image
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
from numpy import *
from scipy.ndimage import filters
from PCV.tools import rof
im = array(Image.open('D:/daima/001/renwu.jpg').convert('L'))
U, T = rof.denoise(im, im)
G = filters.gaussian_filter(im, 10) # 第二个参数越大,图像越模糊
figure()
gray()
subplot(1, 3, 1)
imshow(im)
#axis(‘equal’)
axis('off')
title(u'原噪声图像')
subplot(1, 3, 2)
imshow(G)
#axis(‘equal’)
axis('off')
title(u'高斯模糊后的图像')
subplot(1, 3, 3)
imshow(U)
#axis(‘equal’)
axis('off')
title(u'ROF降噪后的图像')
show()

均衡化
直方图均衡化(Histogram Equalization)是一种增强图像对比度(Image Contrast)的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强图像的对比度。直方图均衡化虽然只是数字图像处理(Digital Image Processing)里面的基本方法,但是其作用很强大,是一种很经典的算法。
# -- coding: utf-8 --
from PIL import Image
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
from PCV.tools import imtools
im = array(Image.open('D:/HSK.jpg').convert('L'))
im2, cdf = imtools.histeq(im)
figure()
subplot(2, 2, 1)
axis('off')
gray()
title(u'原始图像')
imshow(im)
subplot(2, 2, 2)
axis('off')
title(u'直方图均衡化后的图像')
imshow(im2)
subplot(2, 2, 3)
axis('off')
title(u'均衡化后的直方图' )
hist(im.flatten(), 128, normed=True)
subplot(2, 2, 4)
axis('off')
title(u'均衡化后的直方图')
hist(im2.flatten(), 128, normed=True)
show()

引用借鉴
【1】:
【2】:
