精华内容
下载资源
问答
  • 引子最近笔者在处理数据时,遇到.mat文件,遂记录下自己的理解与处理步骤。.mat文件是Matlab中常用的数据格式,形式类似json键值对。{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:...

    ede392c98c36ca160592c20e4311852e.png

    山不来就我,我便去就山

    --《伊斯兰教典》第三章第四节

    0.引子

    最近笔者在处理数据时,遇到.mat文件,遂记录下自己的理解与处理步骤。

    .mat文件是Matlab中常用的数据格式,形式类似json键值对。

    {'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:13:43 2020', '__version__': '1.0', '__globals__': [], 'key1': array([[0, 1]]), 'key2': array([[3]])}

    1.实战

    在Python中,需要通过scipy来操作.mat文件。首先如未安装,请执行:

    pip install scipy

    操作一:保存mat文件

    import scipy.io as sio

    data1 = {

    "key1":[0,1],

    "key2":3

    }

    sio.savemat("save.mat",data1)

    此时可以发现当前文件夹下面多了一个"save.mat"文件

    操作二:读取mat文件

    import scipy.io as sio

    data1 = {

    "key1":[0,1],

    "key2":3

    }

    #sio.savemat("save.mat",data1)

    data2 = sio.loadmat("save.mat")

    print("data1: ",type(data1),data1)

    print("data2: ",type(data2),data2)

    输出:

    (ml) Y:\song\Codes\face_recall>python deal_data.py

    data1: {'key1': [0, 1], 'key2': 3}

    data2: {'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:13:43 2020', '__version__': '1.0', '__globals__': [],

    'key1': array([[0, 1]]), 'key2': array([[3]])}

    可以看出,mat文件内容被保存时,会自动添加一些信息:__header__,__version__,__globals__

    '__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:13:43 2020', '__version__': '1.0', '__globals__': []

    同时还是dict格式数据,修改的是list或者scale会转化为array,这个可以看做numpy.array

    操作三:修改mat文件

    import scipy.io as sio

    data1 = {

    "key1":[0,1],

    "key2":3

    }

    #sio.savemat("save.mat",data1)

    data2 = sio.loadmat("save.mat")

    print("data1: ",type(data1),data1)

    print("data2: ",type(data2),data2)

    data2["__version__"] = "2.0"

    data2["key2"] = 4

    sio.savemat("save.mat",data2)

    data3 = sio.loadmat("save.mat")

    print("data3: ",type(data3),data3)

    输出:

    (ml) Y:\song\Codes\face_recall>python deal_data.py

    data1: {'key1': [0, 1], 'key2': 3}

    data2: {'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:13:43 2020',

    '__version__': '1.0', '__globals__': [], 'key1': array([[0, 1]]), 'key2': array([[3]])}

    data3: {'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:47:59 2020',

    '__version__': '1.0', '__globals__': [], 'key1': array([[0, 1]]), 'key2': array([[4]])}

    可以发现data2["key2"]被修改为了4,而"__version__"信息无法修改。这个问题考虑是因为带"__*__"是内置信息,类似于私有变量,无法修改。

    2.补充

    在1.中可以看到用scipy保存的是"'MATLAB 5.0"版本数据,而v7.3版本的.mat文件是matlab中保存大文件的格式,使用上面的方式是无法读取的,这个时候需要使用h5py,安装如下:

    pip install h5py

    使用

    import h5py

    data = h5py.File('data.mat')

    -1.参考

    本文同步分享在 博客“小宋是呢”(CSDN)。

    如有侵权,请联系 support@oschina.cn 删除。

    本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

    展开全文
  • 对于计算机视觉来说,主要处理的对象是一些结构化的数据,如图像,视频等。对于图像而言,我们可以运行各种成熟的图像处理库很方便的去对图片进行各种操作,使其能够满足框架输入的格式要求。接下来将对每个python...

    随着深度学习越来越热门,一些深度学习框架也应运而生,这方面比较典型的代表有:Tensorflow和Pytorch。

    对于计算机视觉来说,主要处理的对象是一些结构化的数据,如图像,视频等。对于图像而言,我们可以运行各种成熟的图像处理库很方便的去对图片进行各种操作,使其能够满足框架输入的格式要求。接下来将对每个python图像处理库做一个简短的总结,后面有时间会持续性更新。

    一、读入

    对于单通道的黑白图片,其属性如下:

    fc45eff45eff5c0904ae70636d825299.png

    1. matplotlib

    import matplotlib.pyplot as plt

    img_path = r'pic.jpg'

    plt_img = plt.imread(img_path)

    print(f"image shape: {plt_img.shape}") # image shape: (177, 284, 3)

    print(f"image dtype: {plt_img.dtype}") # image dtype: 8bit图像为float32,24bit图像为uint8

    print(f"image type: {type(plt_img)}") # image type:

    matplotlib对于黑白二值单通道图像的读取顺序是HWC(高度宽度通道数),图像的数值类型为float32,数值范围为[0, 1],数据格式为numpy的ndarray数组格式。如果是读入RGB的真彩色图像,则返回的图像数值类型为uint8,数值范围为[0, 255]。matplotlib一般用途为plt显示绘图,它支持多种数据格式的显示输出。

    (2)scikit-image

    from skimage import io

    img_path = r'pic.jpg'

    sk_img = io.imread(img_path)

    print(f"image shape: {sk_img.shape}") # image shape: (177, 284)

    print(f"image dtype: {sk_img.dtype}") # image dtype: uint8

    print(f"image type: {type(sk_img)}") # image type:

    skimage对于黑白二值单通道图像的读取顺序是HW(注意不是HWC),图像的数值类型为uint8,数值范围为[0, 255],数据格式为numpy的ndarray数组格式。对于灰度图像(区分二值图像)来说,读入的是float的数值类型,数值范围为[0, 1]。这个库读入彩色图像的是uint8的数值类型,数值范围是[0, 255],可是一旦你进行了图像操作,比如调用resize,它就变成了float64的数值类型,数值范围是[0, 1]。

    from skimage import io, transform

    img_path = r'image.jpg'

    sk_img = io.imread(img_path)

    print(f"image dtype: {sk_img.dtype}") # image dtype: uint8

    print(sk_img[69][93]) # [118 92 117]

    sk_img = transform.resize(sk_img, (256, 256))

    print(f"image dtype: {sk_img.dtype}") # image dtype: float64

    print(sk_img[69][93]) # [0.77347005 0.49980469 0.41182119]

    skimage读入图像整体较慢,它是基于scipy.ndimage的进一步封装,鉴于其变幻莫测,个人不建议使用。

    (3)opencv-python

    import cv2

    img_path = r'pic.jpg'

    cv2_img = cv2.imread(img_path)

    print(f"image shape: {cv2_img.shape}") # image shape: (177, 284, 3)

    print(f"image dtype: {cv2_img.dtype}") # image dtype: uint8

    print(f"image type: {type(cv2_img)}") # image type:

    cv2_img = cv2.resize(cv2_img, (100, 200)) # 注意它的resize尺寸是按照(宽度,高度)来的

    print(f"image shape: {cv2_img.shape}") # image shape: (200, 100, 3),显示是按(高度,宽度)来的

    cv2读入图像都是统一将其转换成===【3通道的图像,图像的数值类型为uint8,数值范围为[0, 255],数据格式为numpy的ndarray数组格式】。需要注意的是,cv2读入的彩色通道顺序是BGR而不是RGB,所以一般如果我们用cv2.imshow去显示的话,色彩还原便是正常。而如果用其他库区操作,显示出来的图像色彩就跟我们正常看到的不一样了。这个库一般用于数据的保存和读入,还有就是给图像加上文字,画矩形框等(比如目标检测为图像添加矩形框并备注标签和置信度)。

    备注:cv2由于没有license权限,所以它目前暂不支持.gif等图像的读取,而且格外注意cv2要求输入图片路径中不得有中文,否则会读入后不会报错,但是会返回Nonetype,即读空。【虽然可以解决但麻烦~~】

    (4)pillow

    from PIL import Image

    img_path = r'pic.jpg'

    pil_img = Image.open(img_path)

    print(f"image shape: ({pil_img.size[0]}, {pil_img.size[1]}, {pil_img.mode}, {len(pil_img.split())})") # image shape: (284, 177, 'P', 1)

    print(f"image dtype: {pil_img.getpixel((152, 115))}") # image dtype: uint8

    print(f"image type: {type(pil_img)}") # image type:

    备注: L:8位的黑白像素;P:8位像素,可映射到其他模式;RGB:24位的真彩色图像

    PIL的图像读取顺序是WH(宽度高度通道数),图像的数值类型为uint8,数值范围为[0, 255]。

    读入二值图像的话显示的维度是(width, height);读入彩色图像的话则是(width, height, channel)。

    特别注意,它这里读入的顺序是宽度优先,其他库都是高度优先。而且返回的数据类型不是ndarray数组。

    对于Pytorch框架来说,底层的图像处理库是基于PIL的。这里讲一下一些注意的地方

    img = Image.open("image.jpg") # (w, h, c)

    img = img.resize((w1, h1), Image.NEAREST) # resize操作也是按宽高的顺序

    # 这里Image.NEAREST(最近邻插值)一般用于语义分割,而目标检测一般用的插值方法为:BILINEAR(双线性插值,计算成本低),BICUBIC(三线性插值,可以有效的减少边缘的锯齿)

    img = np.array(img) # 数值类型变为uint8

    img = np.array(img, dtype=np.float32) # 指定类型位float32

    print(img.shape) # (h, w, c) 注意这里变回了(h, w, c)

    Pytorch中,封装了一个图像处理库在torchvision里面(torchvision.transforms)。当我们调用torchvision.transforms.ToTense()时,它接收的参数是PIL Image或者numpy.ndarray格式。

    它会将(h, w, c)–uint8–[0, 255]自动转换为(c, h, w)–float32–[0.0, 1.0]

    注意:这里并不支持所有的格式!numpy的ndarray格式必须为np.uint8类型,PIL的Image格式必须为(L,LA,P,I, F, RGB, YCbCr,RGBA,CMYK,1),其他格式一律不会自动转换!所以你输入直接训练的时候很大概率会出现loss为负增长的现象,然后一直收敛不了。

    33a8ae4b2822f9b21c4760ee88c43e0e.png

    74369509a6a29013e8b96f815c388c2b.png

    de638df49f1d5a3342eecff86bcb011e.png

    Jack_0601

    发布了34 篇原创文章 · 获赞 29 · 访问量 3万+

    私信

    关注

    标签:img,python,dtype,image,cv2,那些,shape,图像处理,print

    来源: https://blog.csdn.net/weixin_43509263/article/details/104401330

    展开全文
  • 我试图使用python中提供的“dump”命令将字典转储为pickle格式。字典的文件大小约为150 mb,但只有115 mb的文件转储时发生异常。例外情况是:Traceback (most recent call last):File "C:\Python27\generate_traffic...

    我试图使用python中提供的“dump”命令将字典转储为pickle格式。字典的文件大小约为150 mb,但只有115 mb的文件转储时发生异常。例外情况是:Traceback (most recent call last):

    File "C:\Python27\generate_traffic_pattern.py", line 32, in

    b.dump_data(way_id_data,'way_id_data.pickle')

    File "C:\Python27\class_dump_load_data.py", line 8, in dump_data

    pickle.dump(data,saved_file)

    File "C:\Python27\lib\pickle.py", line 1370, in dump

    Pickler(file, protocol).dump(obj)

    File "C:\Python27\lib\pickle.py", line 224, in dump

    self.save(obj)

    File "C:\Python27\lib\pickle.py", line 286, in save

    f(self, obj) # Call unbound method with explicit self

    File "C:\Python27\lib\pickle.py", line 649, in save_dict

    self._batch_setitems(obj.iteritems())

    File "C:\Python27\lib\pickle.py", line 663, in _batch_setitems

    save(v)

    File "C:\Python27\lib\pickle.py", line 286, in save

    f(self, obj) # Call unbound method with explicit self

    File "C:\Python27\lib\pickle.py", line 600, in save_list

    self._batch_appends(iter(obj))

    File "C:\Python27\lib\pickle.py", line 615, in _batch_appends

    save(x)

    File "C:\Python27\lib\pickle.py", line 286, in save

    f(self, obj) # Call unbound method with explicit self

    File "C:\Python27\lib\pickle.py", line 599, in save_list

    self.memoize(obj)

    File "C:\Python27\lib\pickle.py", line 247, in memoize

    self.memo[id(obj)] = memo_len, obj

    MemoryError

    我真的很困惑,因为之前我的代码运行得很好。

    展开全文
  • python中导入本地.mat数据文件时,总是无法得到正确的数据。问题代码如下:from numpy import *import scipy.iomnist_train = 'D:\Machine Learning\TensorFlow\Softmax Regression\mnist_dataset\mnist_train.mat...

    在python中导入本地.mat数据文件时,总是无法得到正确的数据。

    问题代码如下:

    from numpy import *

    import scipy.io

    mnist_train = 'D:\Machine Learning\TensorFlow\Softmax Regression\mnist_dataset\mnist_train.mat'

    mnist_train_labels = 'D:\Machine Learning\TensorFlow\Softmax Regression\mnist_dataset\mnist_train_labels.mat'

    x = scipy.io.loadmat(mnist_train)

    label = scipy.io.loadmat(mnist_train_labels)

    print(x.shape)

    上段代码输出的结果是(1,1),而对应的数据应是(60000,784)。此时,如果直接输出x,会看到以下结果:

    '''

    [[ {'__version__': '1.0', '__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Tue Nov 29 12:43:31 2011',

    'mnist_train': array([[ 0., 0., 0., ..., 0., 0., 0.],

    [ 0., 0., 0., ..., 0., 0., 0.],

    [ 0., 0., 0., ..., 0., 0., 0.],

    ...,

    [ 0., 0., 0., ..., 0., 0., 0.],

    [ 0., 0., 0., ..., 0., 0., 0.],

    [ 0., 0., 0., ..., 0., 0., 0.]], dtype=float32), '__globals__': []}]]

    '''

    可见,如果本地mat文件包含了额外的信息,则单纯使用scipy.io.loadmat()无法直接读取到所需数据,还应该补充一行对应的代码。

    x = scipy.io.loadmat(mnist_train)

    train_x = x['mnist_train']

    label = scipy.io.loadmat(mnist_train_labels)

    train_label = label['mnist_train_labels']

    展开全文
  • 我是Python的新手,我想向其中导入大小为850M的matlab结构.我使用“ loadmat”,但出现内存错误:return self._matrix_reader.array_from_header(header, process)File "mio5_utils.pyx", line 624, in scipy.io....
  • Matplotlib是Python中令人惊叹的可视化库,用于数组的二维图。Matplotlib是一个基于NumPy数组的多平台数据可视化库,旨在与更广泛的SciPy堆栈配合使用。示例#applyingpseudocolor#...
  • /usr/bin/python# -*- coding: UTF-8 -*-import numpy as npimport matplotlib.pyplot as pltimport csvimport unicodedata#=========================================#该段代码来支持在图片中显示中文plt.rcParams...
  • loadmat python内存错误(loadmat python memory error)我是Python新手,我想导入一个大小为850M的matlab结构。 我使用“loadmat”但我收到内存错误:return self._matrix_reader.array_from_header(header, process)...
  • 因为png格式的图片大小差不多是质量有微小差异的jpg格式的10倍,所以数据集通常不会用png来保存,就不比较这两种格式的读取时间差异了。 写入的实验标准如下: 1、将5张1920x1080的5张图像对应的Pytorch张量转换为...
  • 做cnn的难免要做大量的图片处理。由于接手项目时间不长,且是新项目,前段时间写代码都很赶,现在稍微总结(恩,总结是个好习惯)。1,首先安装python-Image和python-skimage、python-matplotlib。简单代码:import ...
  • python读取和保存图片5种方法对比python中对象之间的赋值是按引用传递的,如果需要拷贝对象,需要用到标准库中的copy模块方法一:利用 PIL 中的 Image 函数这个函数读取出来不是 array 格式,这时候需要用 np.as...
  • 14、下列关于pyplot库的相关属性的描述中,错误的是( ) A、 xlim和ylim可设置x轴和y... 正确答案: 正确 文件操作与异常处理-客观题 一、单选题(共27题,73分) 1、若有如下文件结构,当前目录为“F:\documents\”,则...
  • python 版本 3.x首先安装 PIL由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow...
  • 图片格式:bmp全称:Bitmap不压缩png全称:Portable Network Graphics无损压缩jpg全称:Joint Photographic Experts Group有损压缩opencv(python)中图像读写显示:import cv2 as cvnew_img = cv.imread('baby.png') ...
  • 由于DS9(另一个查看和处理FITS图像的软件)可以更好地处理彩色地图缩放,因此我有了一个想法:使用DS9打开FITS文件来调整图像的颜色映射将此图像保存到PNG文件中在matplotlib中加载这个PNG文件,并从原始FITS文件中...
  • 原标题:标签传播算法(Label Propagation)及 Python 实现来源:zouxy09blog.csdn.net/zouxy09/article/details/49105265众所周知,机器学习可以大体分为三大类:监督学习、非监督学习和半监督学习。监督学习可以认为...
  • 五、自动化特征选择在添加新特征或处理一般高维数据集时,最好将特征的数量减少到只包含最有用的那些特征,并删除其余特征。这样会得到泛化能力更好、更简单的模型。有三种基本策略来判断每个特征的作用有多大:单...
  • batch送数据 next_batch(2,0,images,annotations,0) 1 0 2 1 2 next_batch(2,2,images,annotations,0) 1 2 4 1 2 next_batch(2,10,images,annotations,0) 1 ****************** Epochs completed: 1****************...
  • python 版本 3.x首先安装 PIL由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow...
  • python 和matlab是2个常用的实验室平台工具,在一些应用下,这2个不同平台下的数据会打交道,因此如何读取和保存显得尤为重要,这里需要用到python的第三方平台下的scipy模块。 先用下面这个命令检查是否下载好...
  • 今天有一个mat格式的数据文件需要进行数据,但是mat格式的数据不能直接被现有的模型使用,在这之前就需要做一点转换工作使得mat格式转化为json格式,为了了解一下mat格式的数据文件是什么,我简单查看了一下百度百科...
  • 参考资料:在处理数据的...给你一个mat文件你又想用python处理,该怎么办呢?在网上找到了一个简单的解决方案,下面连带效果图一起贴出来:import scipy.io as sciotrain_imgs_path = ‘train_imgs.mat‘train_imgs...
  • Python处理mat文件1.读取2.数据格式 1.读取 很多人使用MATLAB并将数据存储在.mat文件中。这些文件是什么?这些文件包含MATLAB工作空间分配给它们的变量和对象列表。它作为字典导入到Python中,其中键是MATLAB变量和值...
  • 最近笔者在处理数据时,遇到.mat文件,遂记录下自己的理解与处理步骤。 .mat文件是Matlab中常用的数据格式,形式类似json键值对。 {'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16...
  • 最近处理心电数据 import pandas as pd import scipy from scipy import io #采样频率是2000 features_struct= scipy.io.loadmat('E:/CCCC/ECGdata/20181101first.mat') features = features_struct['data'] #...
  • Python读取mat文件

    千次阅读 2016-11-09 20:44:57
    读取mat文件mat数据格式是Matlab的数据存储的标准...在Python处理mat文件,需要导入scipy库,它的load函数可以加载mat文件。读取进来的数据是字典格式。import scipy.io as sio data = sio.loadmat('ECG_signal.mat')
  •   此文主要是处理将图片数据编码然后传送再解码,然后再转换成之前的图片数据格式   import base64 import numpy as np from numpy import * import cv2 from skimage import io #i...
  • 引子最近笔者在处理数据时,遇到.mat文件,遂记录下自己的理解与处理步骤。.mat文件是Matlab中常用的数据格式,形式类似json键值对。{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 222
精华内容 88
关键字:

python处理mat数据

python 订阅