1、用idle测试python-opencv
先从简单的开始测试,经过课本的学习下载相关照片处理的工具包,下载安装PIL,PIL供了通用的图像处理功能,以及大量有用的基本图像操做,好比图像缩放、裁剪、旋转、颜色转换等。PIL是免费的,能够经过网址下载,可是因为PIL版本过于陈旧因此不能和python通用,刚下载PIL时命令行输入pip install PIL会出现错误,此时的解决方案为,将PIL改为pillow,安装完成结果显示以下:
此时PIL安装成功,能够进行一些图片处理
可是图片显示还须要下载其余的包协助完成,特此安装pylab,可是pip输入pip install pylab安装pylab出现以下错误:
当出现这样的错误时不要怕,咱们还有办法来解决,这是就要安装Matplotlib啦,Matplotlib是个很好的类库,具备比PIL更强大的绘图功能,能够处理数学运算、绘制图表、或者在图像上绘制点、直线和曲线,它能够绘制高质量的图表,此前根据学习下载安装了pylab,可是下载出现如图错误,此时不要慌,不用pylab用Matplotlib也能够达到图片处理效果。pip install Matplotlib下载安装,完成后显示以下,就能够大胆的运行代码啦~~
图片运行代码为:python
from PIL import Image from pylab import * pil_im = Image.open('1.jpg').convert('L') imshow(pil_im) show()
结果显示为:
图像的颜色转换可使用convert()方法来实现,读取一张照片并将其转换程灰度图像,只需加上convert(‘L’)即结果以下所示:
2、绘制图像、点和线图像轮廓和直方图
绘制此图的步骤是首先绘制出原始图像,而后在x和y列表中给定的x坐标和y坐标上绘制出红色星标记点,最后在两个列表表示的两个点之间绘制一条线段。结果显示以下:web
其中实现代码为:svg
from PIL import Image from pylab import * im = array(Image.open('1.jpg')) imshow(im) x=[100,100,400,400] y=[200,500,200,500] plot(x,y,'r*') plot(x[:2],y[:2]) title('Plotting:"1.jpg"') show()
固然除此以外还有实现图片轮廓的处理,图像的轮廓和直方图,绘制图像的轮廓和直方图在工做中十分有用,具体代码以下所示,虽然不美观但仍是有一点点效果的(帅帅的杰哥我对不起你)
图片轮廓处理实现代码及实现效果为:函数
from PIL import Image from pylab import * im = array(Image.open('1.jpg').convert('L')) figure() gray() contour(im,origin='image') axis('equal') axis('off') imshow(im) show()
图像的直方图用来象征该图像像素值的分布状况。用必定数目的小区间来指定表征像素值的范围,每一个小区间会获得落入该小区间表示范围的像素数目,图像的直方图可使用hist()函数绘制,在代码以下:(在原先的图片基础上再加就好)工具
figure() hist(im.flatten (),128) show()
3、高斯滤波
此处我也不是很懂啦,是参考别人的信息,用Sobel算子完成操做:
Sobel算子依然是一种过滤器,只是其是带有方向的。在OpenCV-Python中,使用Sobel的算子的函数原型以下:学习
dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])
前四个是必须的参数:测试
第一个参数是须要处理的图像;
第二个参数是图像的深度,-1表示采用的是与原图像相同的深度。目标图像的深度必须大于等于原图像的深度;
dx和dy表示的是求导的阶数,0表示这个方向上没有求导,通常为0、一、2。
其后是可选的参数:优化
dst不用解释了;
ksize是Sobel算子的大小,必须为一、三、五、7。 ksize=-1时,会用3x3的Scharr滤波器,它的效果要比3x3的Sobel滤波器要好
scale是缩放导数的比例常数,默认状况下没有伸缩系数;
delta是一个可选的增量,将会加到最终的dst中,一样,默认状况下没有额外的值加到dst中;
borderType是判断图像边界的模式。这个参数默认值为cv2.BORDER_DEFAULT。
代码以下:命令行
import numpy as np import cv2 img=cv2.imread('1.jpg',cv2.IMREAD_COLOR) x=cv2.Sobel(img,cv2.CV_16S,1,0) y=cv2.Sobel(img,cv2.CV_16S,0,1) absx=cv2.convertScaleAbs(x) absy=cv2.convertScaleAbs(y) dist=cv2.addWeighted(absx,0.5,absy,0.5,0) cv2.imshow('y',absy) cv2.imshow('x',absx) cv2.imshow('dsit',dist) cv2.waitKey(0) cv2.destroyAllWindows()
convertScaleAbs()的原型为:code
dst = cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])
其中可选参数alpha是伸缩系数,beta是加到结果上的一个值。
实验结果为:
4、直方图均衡化:
图像灰度变换中一个很是有用的例子就是直方图均衡化。直方图均衡化是指将一幅图像的灰度值方图变平,示变换后的图像中每一个灰度值的分布几率都相同。在对图像作进一步处理以前,直方图均衡化一般是对图像灰度值进行归一化的一个很是好的方法,而且能够加强图像的对比度。
对于直方图我遇到了问题,并且理论问题理解不是很透彻,正在优化中,运行代码以下,可是正在完善中——
def histep(im,nbr_bins=256) imhist,bins=histogeram(im.flatten(),nbr_bins,normed=True) cdf=imhist.cumsum() cdf=255*cdf/cdf[-1] im2=interp(im.flatten(),bins[:-1],cdf) return im2.reshape(im.shape),cdf from PIL import Image from numpy import * im=array(Image.open('1.jpg').convert('L')) im2,cdf=imtools.histep(im)
到此,实验完成虽然不是很成功可是也算是撒花啦,之后多多学习好好完善~~