我是MATLAB的新手。我想在MATLAB中读取.img文件,并希望导出它是任何通用的图像格式。我没有关于文件的任何信息(即图像分辨率)我尝试使用fread
命令读取文件。
fid=fopen('image.img');
A=fread(fid,256*378,'unit8=>unit8');
fclose(fid);
b=reshape(A,256,378);
imshow(A);
只有当我知道.img文件的分辨率时,我才能打开它。请帮助我做同样的事情而不知道开始的决议,或者是否有人可以提出更好的方法来做到这一点。
下载.img文件here。
答案 0 :(得分:0)
目前尚不清楚您正在处理的是什么类型的.img文件。 .img文件通常是磁盘映像文件。 Mac,Windows和ISO有不同的文件格式。但是,这听起来像是在询问图形图像文件格式,这可能是专有的。如果您知道用于创建.img文件的程序,您可以了解有关其内部格式的更多信息。
dir函数可用于确定文件中的总字节数,这将允许您使用fread读取文件。但是,您仍然需要知道重塑图像的尺寸。
答案 1 :(得分:0)
如果你想处理图像,Matlab有一个很好的图像处理工具箱,我强烈建议你阅读帮助/手册。你会发现几个可以随时使用的内置函数可以解决你的问题。
imageinfo()
就是其中之一:将显示一个包含多个与图像有关的信息的结构,imread()
将以矩阵形式导入您的图像,mat2grey()
将转换您的RGB图像灰度图像......列表继续。
请勿对图片使用fopen()
/ fread()
/ fclose()
:此类函数主要用于处理文本文件。
PS:你提供的链接包含一个磁盘映像(当然,正如@Herb正确指出的那样,给出了扩展名)。
答案 2 :(得分:0)
代码中fread()
函数的sintax是错误的。
首先,数据类型是 uint8 而不是 unit8 。
U是无符号的,这意味着:所有值都是正数(没有否定"符号"允许)
INT是整数,表示:所有值都是整数,0,1,2,3 ......
8只有8位信息,表示:最大值为255,最小值为0.
其次,函数256*378
中的fread()
参数将创建此图像的另一个维度。因此,正确的方法是使用[]
。
f = fopen('image.img')
image = fread(f, [256 378], '*uint8');
imshow(image,[])
imwrite(image, 'davinci.jpg', 'jpg')
whos image
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
image 256x378 96768 uint8
Total is 96768 elements using 96768 bytes
这个问题可能与question
略有不同