【问题标题】:MATLAB uint8 data type variable saveMATLAB uint8 数据类型变量保存
【发布时间】:2013-06-27 01:47:56
【问题描述】:

有人知道如何将 uint8 工作区变量保存到 txt 文件吗? 我尝试使用 MATLAB 保存命令:

save zipped.txt zipped -ascii

但是,命令窗口显示警告错误:

警告:尝试将不受支持的数据类型写入 ASCII 文件。
变量“压缩”未写入文件。

【问题讨论】:

    标签: matlab file-io integer save text-files


    【解决方案1】:

    为了编写它,只需在编写它之前将你的值转换为两倍。

    A=uint8([1 2 3])
    
    toWrite=double(A)
    
    save('test.txt','toWrite','-ASCII')
    

    uint8不能写的原因隐藏在网上save doc的格式部分,自己找了一下。

    文档页面在这里:http://www.mathworks.com/help/matlab/ref/save.html

    格式部分中表格后的第 3 行(大约在页面的中间位置)显示:

    每个变量必须是二维双精度或字符数组。

    或者,dlmwrite 可以编写 uint8 类型的矩阵,正如另一张海报也提到的那样,我相信 csv 也可以,但我自己还没有测试过。

    希望对你有所帮助,虽然有点烦人!我认为 uint8 几乎专门用于 MATLAB 中的图像,但我假设在您的情况下将值写为图像是不可行的。

    【讨论】:

      【解决方案2】:

      您是否考虑过 Matlab 中的其他写入文件选项?

      dlmwrite 怎么样?
      另一个选项可能是cvswrite

      欲了解更多信息,请参阅this document

      【讨论】:

        【解决方案3】:

        尝试以下方法:

        %# a random matrix of type uint8
        x = randi(255, [100,3], 'uint8');
        
        %# build format string
        frmt = repmat('%u,',1,size(x,2));
        frmt = [frmt(1:end-1) '\n'];
        
        %# write matrix to file in one go
        f = fopen('out.txt','wt');
        fprintf(f, frmt, x');
        fclose(f);
        

        生成的文件将类似于:

        16,108,149
        174,25,138
        11,153,222
        19,121,68
        ...
        

        每行对应一个矩阵行。

        请注意,这是much faster,而不是使用一次写入一行的dlmwrite

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 2020-08-12
        • 2014-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多