Python搭建机器学习环境+库的使用方法+一些示例

来源:互联网 发布:js弹出遮罩层广告 编辑:程序博客网 时间:2024/06/06 18:58

Python搭建机器学习环境

本文在Python已经搭建好opencv开发环境的情况下,搭建机器学习环境。

Python搭opencv开发环境参考之前文章:http://blog.csdn.net/liyuqian199695/article/details/53561318

1、所需安装包

  • 科学计算包:numpy-1.9.1-win32-superpack-python2.7.exe
  • 科学工具集:scipy-0.15.1-win32-superpack-python2.7.exe
  • 画图工具包:matplotlib-1.4.0.win32-py2.7.exe

以上的exe安装文件,直接双击就可以进行安装,并且系统会自动设置安装路径。


2、Numpy库

机器学习算法大部分是调用Numpy库来完成基础数值计算的。

(1)导入Numpy库

from numpy  import  *   或者指定导入库的别名:import  numpy  as  np

(2)创建数组

x=np.array([[1.,0.,0.],[0.,1.,2.]])#创建数组x.ndim   #数组的行数x.shape #数组的维数,返回格式为(n,m)x.size   #数组元素的总数x.dtype #数组元素的类型x.itemsize #数组中每个元素占有的字节大小x.data      #数组元素的缓冲区

python命令行演示


a=arange(15).reshape(3,5)

arange函数产生等差序列数组;reshape函数指定形状的新数组。



3、pylab、matplotlib绘图

(1)sin函数绘制

import numpy as npimport matplotlib.pyplot  as pltx=np.arange(0,5,0.1)y=np.sin(x)plt.plot(x,y)plt.show()



(2)cos函数绘制

import numpy as npimport matplotlib.pyplot  as pltx=np.arange(0,5,0.1)y=np.cos(x)plt.plot(x,y)plt.show()



-8到8范围的cos函数图像

import numpy as npimport matplotlib.pyplot  as pltx=np.arange(-8,8,0.1)y=np.cos(x)plt.plot(x,y)plt.show()



3、图像实例

(1)随机生成像素

import numpy as npimport cv2if __name__ == '__main__':    sz1 = 200   #行数    sz2 = 300   #列数    print u'产生空图像矩阵(%d*%d) ...' % (sz1, sz2) #产生空图像矩阵,大小为sz1*sz2(行*列)    img =np.zeros((sz1, sz2,3), np.uint8)    pos1=np.random.randint(200,size=(2000, 1))    #行位置随机数组    pos2=np.random.randint(300,size=(2000, 1))    #列位置随机数组    for i in range(2000):       #在随机位置处设置像素点值        img[pos1[i],pos2[i],[0]]=np.random.randint(0,255)           img[pos1[i],pos2[i],[1]]=np.random.randint(0,255)        img[pos1[i],pos2[i],[2]]=np.random.randint(0,255)    cv2.imshow('image', img)      #显示图像    cv2.waitKey()             #等待按键    cv2.destroyAllWindows()      #销毁窗口

运行效果


(2)获取图像大小

import cv2fn="abc.jpg"#图像名称if __name__ == '__main__':    print 'loading %s ...' % fn    img = cv2.imread(fn)        #加载图像    sp=img.shape              #获取图像矩阵大小    print sp    sz1=sp[0]                #height    sz2=sp[1]                #width    print 'width:%d\nheight:%d'%(sz2,sz1)

运行结果


(3)图像亮度调节

import cv2fn="abc.jpg"if __name__ == '__main__':        print 'loading %s ...' % fn    print u'正在处理中',    img = cv2.imread(fn)    w=img.shape[1]      #图像宽度    h=img.shape[0]      #图像高度    ii=0       for xi in xrange(0,w):      #将全部色彩变暗        for xj in xrange (0,h):            #将像素值整体减少,设为原像素值的20%            img[xj,xi,0]= int(img[xj,xi,0]*0.2)            img[xj,xi,1]= int(img[xj,xi,1]*0.2)            img[xj,xi,2]= int(img[xj,xi,2]*0.2)        if  xi%10==0 :print '.',              cv2.namedWindow('img')         cv2.imshow('img', img)     cv2.waitKey()    cv2.destroyAllWindows()    print''    print u'正在处理中' ,           for xi in xrange(0,w):      #将全部色彩变亮        for xj in xrange (0,h):            #将像素值整体增加,设为原像素值的1020%            img[xj,xi,0]= int(img[xj,xi,0]*10.2)            img[xj,xi,1]= int(img[xj,xi,1]*10.2)            img[xj,xi,2]= int(img[xj,xi,2]*10.2)        if  xi%10==0 :print '.',         cv2.namedWindow('img1')         cv2.imshow('img1', img)     cv2.waitKey()    cv2.destroyAllWindows()

运行效果


(4)负片与水印效果

负片原理:将像素的三色值设为(255-原值)。

#生成负片b,g,r=cv2.split(img)    #图像分通道b=255-bg=255-gr=255-r

示例

import cv2fn="abc.jpg"if __name__ == '__main__':      print 'loading %s ...' % fn    print u'正在处理中',    img = cv2.imread(fn)    w=img.shape[1]      #图像宽度    h=img.shape[0]      #图像高度    ii=0    #生成底片    b, g, r = cv2.split(img)     #图像分通道    b=255-b    g=255-g    r=255-r      #直接通过索引改变色彩分量     img[:,:,0]=b    img[:,:,1]=g    img[:,:,2]=r    #加上水印---即在图片上写字    cv2.putText(img,"Hello world", (20,20),cv2.FONT_HERSHEY_PLAIN, 2.0, (0, 123, 0), thickness = 2)    cv2.putText(img," machine learning.", (20,100),cv2.FONT_HERSHEY_PLAIN, 1.0, (0, 255, 23), thickness = 2)        cv2.namedWindow('img')         cv2.imshow('img', img)    cv2.waitKey()    cv2.destroyAllWindows()

运行结果



(5)图像平铺

import cv2import numpy as npfn="4.1.07.tiff"if __name__ == '__main__':       print 'loading %s ...' % fn    print u'正在处理中',    img = cv2.imread(fn)    w=img.shape[1]      #图像宽度    h=img.shape[0]      #图像高度    sz1=w*4             #水平平铺4个图像    sz0=h*2             #垂直平铺2个图像        myimg1=np.zeros((sz0,sz1,3), np.uint8)   #创建空白图像,然后将图片排列            #逐个像素复制    img_x=0    img_y=0    for now_y in xrange(0,sz0):        for now_x in xrange(0,sz1):            #复制对应位置的图像像素点            myimg1[now_y,now_x,0]=img[img_y,img_x,0]            myimg1[now_y,now_x,1]=img[img_y,img_x,1]            myimg1[now_y,now_x,2]=img[img_y,img_x,2]                          img_x+=1        #增加列数            if img_x>=w:                img_x=0        img_y+=1                if img_y>=h:            img_y=0                    print '.',    cv2.namedWindow('img1')         cv2.imshow('img1', myimg1)        cv2.waitKey()    cv2.destroyAllWindows()

运行结果



(6)旋转并平铺图像

import cv2import numpy as npfn="abc.jpg"if __name__ == '__main__':       print 'loading %s ...' % fn    print 'working',    img = cv2.imread(fn)    w=img.shape[1]      #图像宽度    h=img.shape[0]      #图像高度    sz1=w*2    sz0=h*3         myimg1=np.zeros((sz1,sz0,3), np.uint8)   #创建空白图像,然后将图片排列         #翻转并生成图像     img_x=0    img_y=0    for now_y in xrange(0,sz0):        for now_x in xrange(0,sz1):            myimg1[now_x,now_y,:]=img[img_y,img_x,:]     #逐个像素复制                  img_x+=1            if img_x>=w:                img_x=0        img_y+=1                if img_y>=h:            img_y=0                    print '.',    cv2.namedWindow('img1')         cv2.imshow('img1', myimg1)        cv2.waitKey()    cv2.destroyAllWindows()

运行结果



(7)图像融合

是让两幅原图像对应像素的平均值之和作为新图像像素值。

import cv2
fn1="he1.jpg"fn2="he2.jpg"if __name__ == '__main__':      print '...'    print 'working',    myimg1 = cv2.imread(fn1)    myimg2 = cv2.imread(fn2)        w=myimg1.shape[1]    h=myimg1.shape[0]    sz1=w    sz0=h     #每个像素为2个像素的平均值    for y in xrange(0,sz0):        for x in xrange(0,sz1):            myimg2[y,x,:]=myimg1[y,x,:]*0.5+myimg2[y,x,:]*0.5                            print '.',                  cv2.namedWindow('img2')         cv2.imshow('img2', myimg2)        cv2.waitKey()    cv2.destroyAllWindows()

运行结果

         

(8)图像镜像

import cv2fn="abc.jpg"if __name__ == '__main__':       print 'loading %s ...' % fn    print '正在处理中',    img = cv2.imread(fn)    w=img.shape[1]    h=img.shape[0]        ii=0    #关于纵向生成镜像    #    mirror_w=w/2    for j in xrange(0,h):        for i in xrange(0,mirror_w):            img[j,i,:]=img[j,w-i-1,:]        print '.',    cv2.namedWindow('img')         cv2.imshow('img', img)        cv2.waitKey()    cv2.destroyAllWindows()

运行结果



4、声音基础

(1)声音波形

声音波形属于正弦波,振幅和频率是其主要特性,振幅就是音量,频率是音调。

  • 使用wave库的open方法打开WAV文件:f=wave.open(r"back.wav","rb")  #以读方式打开wav文件
  • 读取信息格式:getparams方法返回前4项依次为通道数、样本宽度、样本频率、波形数据长度。

# 读取格式信息# (nchannels, sampwidth, framerate, nframes, comptype, compname)params = f.getparams()nchannels, sampwidth, framerate, nframes = params[:4]

  • 读取波形数据
str_data = f.readframes(nframes)f.close()

  • 将波形数据转换为数组
wave_data = np.fromstring(str_data, dtype=np.short)wave_data.shape = -1, 2wave_data = wave_data.Ttime = np.arange(0, nframes) * (1.0 / framerate)

  • 计算时间轴:time = np.arange(0, nframes) * (1.0 / framerate)
示例代码

import waveimport pylab as plimport numpy as np
print 'working...' f = wave.open(r"back.wav", "rb")# 打开WAV文档
# 读取格式信息# (nchannels, sampwidth, framerate, nframes, comptype, compname)params = f.getparams()nchannels, sampwidth, framerate, nframes = params[:4]
# 读取波形数据str_data = f.readframes(nframes)f.close()
#将波形数据转换为数组wave_data = np.fromstring(str_data, dtype=np.short)wave_data.shape = -1, 2wave_data = wave_data.Ttime = np.arange(0, nframes) * (1.0 / framerate)
# 绘制波形
pl.subplot(211)pl.plot(time, wave_data[0])pl.subplot(212)pl.plot(time, wave_data[1], c="g")pl.xlabel("time (seconds)")pl.show()

运行结果




0 0