您的位置:首页 > 编程语言 > Python开发

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

2016-12-24 21:52 961 查看
Python搭建机器学习环境本文在Python已经搭建好opencv开发环境的情况下,搭建机器学习环境。Python搭opencv开发环境参考之前文章:http://blog.csdn.net/liyuqian199695/article/details/535613181、所需安装包科学计算包: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 np
import matplotlib.pyplot  as plt
x=np.arange(0,5,0.1)
y=np.sin(x)
plt.plot(x,y)
plt.show()
(2)cos函数绘制
import numpy as np
import matplotlib.pyplot  as plt
x=np.arange(0,5,0.1)
y=np.cos(x)
plt.plot(x,y)
plt.show()
-8到8范围的cos函数图像
import numpy as np
import matplotlib.pyplot  as plt
x=np.arange(-8,8,0.1)
y=np.cos(x)
plt.plot(x,y)
plt.show()
3、图像实例(1)随机生成像素
import numpy as np
import cv2
if __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 cv2
fn="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 cv2
fn="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-b
g=255-g
r=255-r
示例
import cv2
fn="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 cv2
import numpy as np
fn="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 cv2
import numpy as np
fn="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()
运行结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: