相关文章推荐
难过的春卷  ·  Cannot add merged ...·  2 周前    · 
温暖的煎饼  ·  matlab 中[trainedNet, ...·  1 周前    · 
有腹肌的香烟  ·  javascript - How do I ...·  1 年前    · 
从未表白的墨镜  ·  Intent.EXTRA_ALLOW_MUL ...·  1 年前    · 
痴情的橙子  ·  Java8 ...·  1 年前    · 
完美的消炎药  ·  Java,Pattern.compile ...·  1 年前    · 

Matlab保存数据时显示:错误使用 imwrite>validataSizes 图像的数据必须少于2^23-1 字节 。

问题描述:

最近在用matlab对图像进行初处理,由于处理的量级比较大,单张图片据可能超过了正常的处理范围,导致matlab在处理时能处理,但是使用imwrite()进行保存的时候,就显示了:

validataSize(data); %data为要保存的数据

如下图问题所示:
在这里插入图片描述
数据过多,无法保存。

1、解决方法(uint8格式转换):

%原来的步骤
img = imread('path')
imwrite(img,'new path')
%解决问题的步骤(节省空间,能写出)
img = imread('path')
img1 = im2uint8(img)
imwrite(img1,'new path')

1.1 处理效果:

在这里插入图片描述
内存之只有原来的约1/5,用PS打开查看之后,发现像素并无丢失。

2 、解决方法(设置validataSizes数值)

此处感谢@sunxueping01 提供的方法。
在这里插入图片描述

=============================================================

下面是关于解决方法1的思路(需要可以看下去)

思路1:imwrite()

针对这个存在的问题,我最开始解决问题的方法是朝着imwrite()这个函数去的。

因为我想着数据写不出来是因为使用imwrite()的时候,对于大图像的写入需要特定的格式。
然而,搜!寻!无!果!

思路2:matlab的内存问题

处理不了,说明处理过程中可能是matlab的内存溢出了,导致程序处理的问题,所以我就想着修改一下matlab处理程序的内存上限。
当然,结果还是不行。

思路3:图片或者数据的格式问题

matlab中,图像等的写出写入都是以数据的形式写出来的,而数据在接触图像处理的时候就知道,比如int型,double型等。

当你走入绝境的时候,不要放弃任何一个可以求生的机会。

解决问题的“峰回路转”

偶然翻到一篇问题,使用MATLAB以全分辨率将许多图像的蒙太奇图像保存为一个大图像文件(Using MATLAB to save a montage of many images as one large image file at full resolution)

情况跟我的差不多,点开看,回答给了我启示。
在这里插入图片描述
结合之前关于问题解决的思考3,决定去查一查uint8的使用。
文章1:im2uint8 百度百科:有用
文章2:matlab中uint8,double,im2uint8,im2double的区别
文章2这么写的:
在这里插入图片描述
说uint8可以节省空间,还用了double做比较,基于想要弄清楚问题的想法,我去查了查double与uint8的区别。

uint8与doule之间 差不多1:8的内存比例。(简直是写出大内存数据的救星!!!)
在这里插入图片描述
并且,并不变动数据,就算变动,也是unit8和double之间转换一下处理就行,可以参考:matlab图像类型转换以及uint8、double、im2double、im2uint8和mat2gray等说明

处理效果:

在这里插入图片描述
内存之只有原来的约1/5,用PS打开查看之后,发现像素并无丢失。(完结撒花)

======================================================END

图像堆栈保护程序 image_save(Im1,basename) image_save(Im1,basename,fmax) 用于附加的图像堆栈,例如最常见的堆栈 TIF 文件。 某些操作系统会抛出一个错误,表明该文件是在写入无法访问,这会导致代码错误并且可以非常令人沮丧。 这个简单的脚本解决了这个问题,主要是在视窗操作系统。 Im1 = 要添加到堆栈中的当前图像(矩阵) basename = 是一个指定文件名的字符串,可能是要保存到的堆栈路径。 最佳实践是在末尾放置 '.tif' 的文件名。 fmax = 允许的最大失败次数,即如果脚本试写入文件 'fmax' 次失败,它将放弃。 这可以防止进入无限循环。 默认值为 fmax = 10。 任何 'imwrite' 参数都可以在第 38 行修改。 %VIDEO2PIC 将视频帧转换为片。 % 此功能使用 mmreader 来读取视频。 因此支持视频格式%按系统可以转换成片。 输出文件名跟在% 格式:VideoName_FrameNumber.PicSuffix。 % % VIDEO2PIC 交互式输入参数。 % VIDEO2PIC( VIDEOFILE, OUTPUTPATH, PICFORMAT ) 作为% 功能。 % % videoFile:要转换的视频的完整路径。 % outputPath:片将保存在 outputPath/videoname/ 下。 % picFormat: 勾选‘help imwrite’ % % 王世全@CASIA % sqwang@nlpr.ia.ac.cn %http://www.cbsr.ia.ac.cn/users/sqwang/ % 修订于 2009/10/19 IMWRITE2TIF 将图像写入具有指定数据类型的 tif 文件。 IMWRITE2TIF(IMGDATA,HEADER,IMFILE,DATATYPE)将带有HEADER的IMGDATA导出到名为IMFILE的TIF文件。 HEADER 通常由IMFINFO 从原始图像文件中获取,也可以留空。 字符串 DATATYPE 指定导出的数据类型。 支持的数据类型包括逻辑、uint8、int8、uint16、int16、uint32、int32、uint64、int64、single 和 double。 IMWRITE2TIF(IMGDATA,HEADER,IMFILE,DATATYPE,TAG NAME1,TAG VALUE1,TAG NAME2,TAG VALUE2, ...) 使用指定的 Matlab 支持的 TIF 标签值写入。 这些新标签值会覆盖 HEADER 中已定义的值。 注 写了个简单的测试程序,用imwrite保存图像,一直运行失败,试了多改动还是不行。后来想到执行加上sudo,执行成功。应该是因为非root权限不允许创建新文件导致的,又填了一个坑。 目前我正在matlab上进行图像处理项目,我简单地使用网络摄像头捕捉图像保存图像使用hough变换处理图像,然后尝试保存图像。当我在转换的图像使用imwrite函数,出现此错误:??? Error using ==> imwrite>validateSizes at 596Unsupported image datatype 'struct'.Error in ==> i... 第二步:自己在网上找到这个函数的工具包进行安装,但是这个比较麻烦,又得找又得装 第三步:一个简单的方法,让同学试一下它的matlab中能不能help到这个函数,如果可以的话直接让它把这个函数拷贝给你,你放在自己要运行的文件 两解决方案:第一把ebug变成所谓的realease 第二就是简单的在imwrit中添加第三个参数 compression_params 参考:https://cloud.tencent.com/developer/article/1010015 该语句出现于格式化输出的格式字符串中。形式为"0x%08x"其中,0x为普通字符,输出的候会原样输出为0x。%08x为整型以16进制方式输出的格式字符串,会把后续对应参数的整型数字,以16进制输出。08的含义为,输出的16进制值占8位,不足部分左侧补0。于是,如果执行printf("0x%08x", 0x1234);会输出0x00001234。 转载于:https://www.cnblogs.... 福师2017年《计算机应用基础》在线作业 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!14.9 积分. .福师《计算机应用基础》在线作业二一、单选题:【40道,总分:80分】1.为了在磁盘中快速查找所有的“.doc”文件,最快且准确的查找方式是( )。 (满分:2) A. 按名称 B. 按日期 C. 按大小 D. 按类型 正确答案:[hide]... matlab的安装其实挺简单的,因为步骤加起来不到5步,就是后面安装的候比较久,挺烦人。我弄了一天多,终于弄出个结果来。这里记录一下安装过程中碰到的问题。 开始是从这里下载的MATLAB 2014a中文破解版的,7.33个G,下了好几个小终于下完了。然后开始安装(安装教程可以参考这个),花了半个小终于装到96%了,结果突然报错: 不知道什么意思,就点击了“是”重试,重试了好几次,一... 无法打开要写入的文件 “D:/chongmingming/label/1.png”。您可能没有写入权限。解决办法:试了好多办法都没解决,最后将绝对路径改为相对路径即可。错误使用 imwrite (line 528) x=input(‘please input a string:’,‘s’) please input a string:this is a string x = this is a string 输出:输出有两形式,你要确定你要把待输出的内容输出到哪里,是文件里还是commend win