美文网首页
Scipy文件输入/输出/Mp3/图片

Scipy文件输入/输出/Mp3/图片

作者: 垃圾桶边的狗 | 来源:发表于2019-05-16 23:26 被阅读0次

    随机生成数组,使用scipy中的io.savemat()保存
    文件格式是.mat,标准的二进制文件


    import scipy.io as io
    

    保存

    # result是图片的ndarray
    io.savemat('./moon_clean.mat',mdict = {'moon':np.real(result)})
    

    使用io.loadmat()读取数据

    io.loadmat('./moon_clean.mat')['moon']
    

    47.png


    读写图片使用scipy中misc.imread()/imsave()

    from scipy import misc
    
    import warnings
    
    warnings.filterwarnings('ignore')
    
    cat = misc.imread('./cat.jpg')
    plt.imshow(cat)
    
    5.04.png

    misc旋转、resize、imfilter

    cat2 = misc.imrotate(cat,90)
    plt.imshow(cat2)
    
    19.png
    '''size : int, float or tuple
            * int   - Percentage of current size.
            * float - Fraction of current size.
            * tuple - Size of the output image (height, width).
    '''
    cat3 = misc.imresize(cat,0.2)
    # cat4 = misc.imresize(cat,(200,200))
    plt.imshow(cat4)
    cat3.shape
    plt.imshow(cat3)
    
    8.png
    '''ftype : str
            The filter that has to be applied. Legal values are:
            'blur', 'contour', 'detail', 'edge_enhance', 'edge_enhance_more',
            'emboss', 'find_edges', 'smooth', 'smooth_more', 'sharpen'.'''
    # 原理:卷积操作
    # 卷积神经网络tensorflow
    cat6 = misc.imfilter(cat,'find_edges')
    plt.imshow(cat6)
    
    2.png

    音乐处理

    11.png
    from scipy.io import wavfile
    
    like = wavfile.read('./邓紫棋-喜欢你.wav')
    like
    
    like[1].shape
    

    out:(10776444, 2)
    歌曲秒数时间

    like[1].shape[0]/44100
    

    out244.36380952380952

    231.png
    lost = wavfile.read('./林俊杰-爱不会绝迹.wav')
    lost
    
    2323.png
    歌曲拼接,前一分钟和后一分钟
    mix = np.concatenate([like[1][:44100*60],lost[1][-44100*60:]])
    
    mix.shape
    

    out(5292000, 2)

    保存文件
    wavfile.write('./mix.wav',44100,mix)
    
    scipy不能处理mp3
    pip install pydub
    
    42.png

    读取Mp3

    jing = pydub.AudioSegment.from_mp3('./难念的经.mp3')
    jing
    
    you = pydub.AudioSegment.from_mp3('./一路上有你.mp3')
    you
    
    jing[:1000*30] + you[:1000*30]
    
    data = you.get_array_of_samples()
    
    type(data)
    

    array.array

    data_raw = np.array(data.tolist())
    data_raw.shape
    

    (25337088,)

    # 此数据就是wav格式用到的数据
    data_raw = data_raw.reshape(-1,2)
    data_raw.shape
    

    (12668544, 2)

    you.frame_rate
    
    
    wavfile.write('./一路有你.wav',44100,data_raw.astype(np.int16))
    

    使用ffmpeg操作视频

    
    # ffmpeg -i law.mp4 -f mp3 -vn law.mp3
    # 获取音频
    import subprocess
    
    cmd = 'ffmpeg -i law.mp4 -f mp3 -vn law2.mp3'
    # 执行成功,subprocess返回结果是0
    subprocess.call(cmd)
    
    # 从视频中获取无声视频
    cmd = 'ffmpeg -i 1.mp4 -vcodec copy -an 2.mp4'
    
    subprocess.call(cmd)
    
    # 合并视频和音频
    cmd = 'ffmpeg -i law.mp3  -i 2.mp4 out.mp4'
    
    subprocess.call(cmd)
    

    图片处理

    使用scipy.misc.face(gray=True)获取图片,使用ndimage移动坐标、旋转图片、切割图片、缩放图片
    导包,读取图片显示图片

    import numpy as np
    # 移动坐标、旋转图片、切割图片、缩放图片、滤波(不清晰的图片,清晰化,取出‘噪声’)
    from scipy import ndimage
    
    from scipy import misc
    
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    # misc模块中,有一张图片
    # 样本图片
    face = misc.face()
    plt.imshow(face)
    
    3.png

    shift移动坐标

    face.shape
    

    (768, 1024, 3)

    # jpg 0~255 0:纯黑,255纯白
    face2 = ndimage.shift(face,shift=[100,200,0],cval=255)
    plt.imshow(face2)
    
    35.png
    # mode : {'reflect', 'constant', 'nearest', 'mirror', 'wrap'
    # mirror reflect 镜像
    # nearest 最近的像素进行填充
    # wrap使用移出去的像素进行填充
    face3 = ndimage.shift(face,shift=[0,-400,0],mode='wrap')
    plt.imshow(face3)
    
    we.png

    rotate旋转图片

    face4 = ndimage.rotate(face,angle = 60)
    plt.imshow(face4)
    
    21.png
    face5 = misc.imrotate(face,60)
    plt.imshow(face5)
    
    3243.png

    zoom缩放图片

    # zoom : float or sequence
    face6 = ndimage.zoom(face,zoom = 1/3)
    face6.shape
    # 合法:黑白二维;彩色三维(第三维,三个数RGB,四个数ARGB)
    plt.imshow(face6.reshape(256,-1),cmap = plt.cm.gray)
    
    2145.png
    # zoom : float or sequence
    face6 = ndimage.zoom(face,zoom = 4/3)
    face6.shape
    # 合法:黑白二维;彩色三维(第三维,三个数RGB,四个数ARGB)
    # plt.imshow(face6.reshape(256,-1),cmap = plt.cm.gray)
    

    (1024, 1365, 4)

    face6[:,:,0] = 0.1
    plt.imshow(face6)
    
    dsfsdf.png
    face6
    
    47.png
    # jpg类型透明度:0 ~ 255
    # png类型图片 0 ~ 1
    # 彩色图片三维,第三维四个数据:RGBA(alpha,透明)
    face6[:,:,3] = 20
    plt.imshow(face6)
    # 机器学习:图片辨识、语音识别、
    
    42.png
    face.shape
    

    (768, 1024, 3)

    face6 = ndimage.zoom(face,zoom = [200/768,300/1024,1])
    face6.shape
    plt.imshow(face6)
    
    54.png

    切割图片

    # numpy切片操作
    face7 = face[:512,-512:]
    plt.imshow(face7)
    
    02.png

    图片进行过滤
    添加噪声,对噪声图片使用ndimage中的高斯滤波、中值滤波、signal中维纳滤波进行处理
    使图片变清楚

    moon = plt.imread('./moonlanding.png')
    plt.figure(figsize=(12,9))
    plt.imshow(moon,cmap = 'gray')
    
    11.png
    # sigma高斯核,高斯分布,正态分布,sigma离散程度
    moon2  = ndimage.gaussian_filter(moon,sigma=2)
    plt.figure(figsize=(12,9))
    plt.imshow(moon2,cmap = 'gray')
    
    55.png
    moon2 = ndimage.median_filter(moon,size = 5)
    plt.figure(figsize=(12,9))
    plt.imshow(moon2,cmap = 'gray')
    
    09.png
    moon2 = ndimage.median_filter(moon,size = 10)
    plt.figure(figsize=(12,9))
    plt.imshow(moon2,cmap = 'gray')
    
    9.png
    moon2 = ndimage.median_filter(moon,size = 50)
    plt.figure(figsize=(12,9))
    plt.imshow(moon2,cmap = 'gray')
    
    qw32.png

    signal维纳滤波mysize:滤镜尺寸的标量

    from scipy import signal
    
    moon3 = signal.wiener(moon,mysize=5)
    plt.figure(figsize=(12,9))
    plt.imshow(moon3,cmap = 'gray')
    
    xcb10.png
    moon3 = signal.wiener(moon,mysize=20)
    plt.figure(figsize=(12,9))
    plt.imshow(moon3,cmap = 'gray')
    # 
    
    jhgj46.png

    相关文章

      网友评论

          本文标题:Scipy文件输入/输出/Mp3/图片

          本文链接:https://www.haomeiwen.com/subject/vzyboqtx.html