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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liyuqian199695/article/details/53861834

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 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 cv2
fn="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, 2
	wave_data = wave_data.T
	time = np.arange(0, nframes) * (1.0 / framerate)

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

	import wave
	import pylab as pl
	import 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, 2
	wave_data = wave_data.T
	time = 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()

运行结果




展开阅读全文

没有更多推荐了,返回首页