python np库小知识点补充 mat npy 转换

matlab的.mat矩阵数据与python的.npy数据的转换#npy转mat

import numpy as np
import scipy.io as sio   #读.mat用的
from sklearn import preprocessing   #图像归一化用的库

#npy转mat
# file_15 = '/home/.../np15/'
# file_17 = '/home/..../np17/'
# imgs15 = os.listdir(file_15)
# imgs17 = os.listdir(file_17)
# for img15 in imgs15:
#     image = np.load(file_15 + img15)    #np.load()实现读取.nyp数据.
#     sio.savemat('/home/..../mat15/%s.mat' % img15[:-4], {"image15" : image})  #sio.savemat()保存成.mat
#直接sio.savemat('/home/..../mat15/%s.mat' % img15[:-4], image)会报错,得给个字典式的操作(不过我也不明白为啥)
#http://blog.csdn.net/Cheese_pop/article/details/77989865  我参考的这篇博客。


#mat转npy
# file_15 = '/home/..../smat15/'
# file_17 = '/home/..../smat17/'
# imgs15 = os.listdir(file_15)
# imgs17 = os.listdir(file_17)
#
# for img15 in imgs15:
#     image = sio.loadmat(file_15 + img15)   #sio.loadmat()读mat文件
#     np.save('/home/lenovo/2Tdisk/Wkyao/FirstSetp/all11.1/s15/%s.npy' % img15[:-4], image)   #np.save()保存成.npy


#另外补充一个python库中的图像归一化的函数((img-mean)/sdt) 像素减均值后再除以方差
# img_1 = preprocessing.scale(img)


这样就可以完成python和matlab之间的数据转换和传递了。

在MATLAB里读取.mat的时候,会出现一个矩阵数据,如:MxN 被作为整体元素,变成1x1 size 的问题,那么,这个时候需要用importdata()函数来读.mat 而不是简单的load(). 栗子:

im = importdata(fullfile(in_dir, ims(i).name));

顺便说一下fullfile( , ) 它的作用是把括号内的内容拼接起来,组成完整的字符串文件路径.

ims(i).name 的作用是, 返回ims序列中索引为i的元素的名字。  以上均是matlab语言。


再返回来说强大的np库:实现图像旋转、镜像。栗子:

# coding=utf-8
import os
import numpy as np
import tifffile as tiff


#实现图像旋转
def roate(in_folder, out_folder):
    img_names = os.listdir(in_folder)  # img_names为tiff图像
    for name in img_names:
        image = tiff.imread(in_folder + name)
        image_90 = np.rot90(image)      # 转90°    
        image_180 = np.rot90(image, 2)  # 转180°   
        image_270 = np.rot90(image, 3)  # 转270°
        #这么理解吧:np.rot90(image,x) 函数,x缺省时,默认为1,逆时针转90度,x=2代表转180度,3代表转270度。
        tiff.imsave(out_folder + name[:-5] + '_1.tiff', image_90)
        tiff.imsave(out_folder + name[:-5] + '_2.tiff', image_180)
        tiff.imsave(out_folder + name[:-5] + '_3.tiff', image_270)

    return

#实现图像镜像
def mirror(in_folder, out_folder):
    img_names = os.listdir(in_folder)  # img_names为tiff图像
    for name in img_names:
        image = tiff.imread(in_folder + name)
        rotate_1 = np.rot90(image.T)  # 上下翻转  先转置,再逆时针转90度。 
        rotate_2 = np.rot90(image.T, 3)  # 左右翻转  先转置,再逆时针转270度。
        rotate_3 = np.rot90((np.rot90(image.T)).T, 3)
        tiff.imsave(out_folder + name[:-5] + '_1.tiff', rotate_1)
        tiff.imsave(out_folder + name[:-5] + '_2.tiff', rotate_2)
        tiff.imsave(out_folder + name[:-5] + '_3.tiff', rotate_3)
        tiff.imsave(out_folder + name[:-5] + '_0.tiff', image)
    return

 要是转置旋转绕不清,就那最简单的[[1,2],[3,4]]这个小矩阵在草稿纸上写,顺时针逆时针什么的就搞明白了~!

另外还有一些np的小函数:

img = img.astype(np.float16)    对于图像转位深很好用。

.index()函数:

返回列表中某元素第一次出现的位置(索引值)

栗子:

a = [1, 2, 8, 4]

b = a.index(8)    :2  索引值为2.




未完待续......还回来补充,欢迎大家指正!





























  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值