Python---图像基础处理

一、软件安装及环境配置

在做图像处理时我使用了pycharm开发平台加python(3.7.0)环境,并且需要使用很多图像库以及工具库

PIL(Python Imaging Library,图像处理类库),提供了通用的图像处理功能(图像缩放、裁剪、旋转、颜色转换等),以及大量有用的基本图像操作。

PCV:包含了计算机视觉中所运用的一些工具包,如图像分类中的knn、bayes,聚类中的hcluster,地理标记中的sfm、homographt、wrap等,以及图像检索,特征值提取。

Matplotlib:是python比较底层的可视化库,可定制性强、图表资源丰富、简单易用、达到出版质量级别。

还有其他的包就不一一介绍了这些都是图像在处理之前的准备工作。

我下载安装了这些包

 二、图像的基本处理

1.直方图

图像的直方图用来表征该图像像素值的分布情况。用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目。图像的直方图可以使用 hist() 函数绘制。hist() 函数的第二个参数指定小区间的数目。需要注意的是,因为 hist() 只接受一维数组作为输入,所以我们在绘制图像直方图之前,必须先对图像进行压平处理,即灰度化处理

代码

from PIL import Image
im = Image.open('E://Python_code//sea.jpg.jpg')
im.show()
im_change = Image.open('E://Python_code//sea.jpg').convert('L')
im_change.show()
hist(im_change.flatten(),128)
plt.xlim([0,260])
plt.ylim([0,10000])
show()
结果:
原图

灰度化图像

图像灰度后直方图

 

2.直方图均衡化

直方图均衡化是指将一幅图像的灰度直方图变平,使变换后的图像中每个灰度值的分布概率都相同。在对图像做进一步处理之前,直方图均衡化通常是对图像灰度值进行归一化的一个非常好 的方法,并且可以增强图像的对比度。

源代码:

# coding=utf-8
from PIL import Image
from pylab import *
from numpy import *
from PCV.tools import imtools
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:windowsfontsSimSun.ttc", size=14)
im = array(Image.open("E://Python_code//sea.jpg").convert('L')) # 打开图像,并转成灰度图像
im2, cdf = imtools.histeq(im)
figure()
subplot(2, 2, 1)
axis('off')
gray()
title(u'(a)灰度化图', fontproperties=font)
imshow(im)
subplot(2, 2, 2)
axis('off')
title(u'(b)灰度均衡化图', fontproperties=font)
imshow(im2)
subplot(2, 2, 3)
axis('off')
title(u'(c)灰度化直方图', fontproperties=font)
hist(im.flatten(), 128, normed=True)
subplot(2, 2, 4)
axis('off')
title(u'(d)均衡化后直方图', fontproperties=font)
hist(im2.flatten(), 128, normed=True)
show()
结果:

3.高斯滤波图

高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器不同,均值滤波器的模板系数都是相同的为1;而高斯滤波器的模板系数,则随着距离模板中心的增大而系数减小。所以,高斯滤波器相比于均值滤波器对图像个模糊程度较小。

源代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('E://Python_code//sea.jpg')
source = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
result = cv2.GaussianBlur(source, (10,10), 0)#高斯滤波,这里使用10*10的卷积核
titles = ['原图', '高斯滤波图']
images = [source, result]
for i in range(2):
plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
结果:

、总结:

      作为初学python小白,感觉python语言简单,非常适合阅读,也易学,python虽然是用c语言写的,但是它摒弃了c中非常复杂的指针,简化了python的语法。通过这门课我了解到Python标准库确实很庞大。python有可定义的第三方库可以使用。它可以帮助你处理各种工作,除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。Python确实是一种十分精彩又强大的语言。它合理地结合了高性能与使得编写程序简单有趣的特色。同时Python采用强制缩进的方式使得代码具有极佳的可读性。安装软件的过程中遇到了无法导库,pip不能下载第三方库等问题,但是通过询问同学百度得以大部分的解决,以后要认真学习!!

原文地址:https://www.cnblogs.com/lhx0814/p/12348258.html