imread、imwrite、imfinfo、fread、imshow

一、imread直接读取图片数据。

示例一

下面这段代码读取一张图片并显示出来
filename = 'e. bmp';
imgRgb = imread(filename); % 读入一幅彩色图像
imshow(imgRgb); % 显示彩色图像

示例二

下面这段代码把24位 真彩色 位图转为灰度图像
filename = 'e.bmp';
imfinfo(filename) % 查看图像文件信息
imgRgb = imread(filename); % 读入一幅彩色图像
imshow(imgRgb); % 显示彩色图像
imgGray = rgb2gray(imgRgb); % 转为 灰度图像
figure % 打开一个新的窗口显示灰度图像
imshow(imgGray); % 显示转化后的灰度图像
imwrite(imgGray, 'gray.jpg'); % 将灰度图像保存到图像文件

二、fread可以读取复杂类型的图片格式数据,如img后缀的遥感、极光数据

fread函数常见用法:1、A=fread(fileID,sizeA,precision,skip,machinefmt)  2、A=fread(fileID) 3、fread(fileID,sizeA) 4、A=fread(fileID,sizeA,precision) 5、A=fread(fileID,sizeA,precision,skip) 6、A=fread(fileID,sizeA,precision,skip)

直接讲第一种参数最多时候的用法,其他可以类推。

fread函数主要用法读取二进制文件。

下面是常用参数的含义:

1、fileID 文件标识

打开的文件标识。比如fid=fopen('file.dat'); fid就是fileID,即文件标识

2、sizeA  输出数组的维度

有3种参数,Inf、n、[m,n]

Inf 代表输出数据是列向量,文件中每一个元素对应一个值

n 代表有n个元素的列向量

[m,n] 代表按列向量排列的m行n列的矩阵,n可以取Inf,但m不可以

3、precision   需要读取数据的类型和大小,默认'uint8=>double'

常见有uint,uint8、uint16等数据格式,需要根据源数据来确定

4、skip   代表跳过多少字节,默认为0

5、machinefmt 待读取数据字节的排列方式,默认为'n'

需要根据源数据格式来确定,有'b'、'l'、's'、'a'等格式

'n'就是系统字节的排列顺序,即‘native’

'b'就是'ieee-be',即'Big-endian ordering',即低位字节排放在内存的高地址端,高位字节排放在内存的低地址端

'l'就是‘ieee-le’,即‘Little-endian ordering’即低位字节排放在内存的低地址端,高位字节排放在内存的高地址端

另外,由于imread读取的是一般的图片数据,如png后缀的图片,本身就是存储的颜色索引,所以用imshow(data)(表示data值直接代表颜色)或者imshow(data,[])(表示data的值需要先线性映射到1-256的颜色空间)看到的结果一样。但在读取后缀.img(采用uint16精度)的数据文件时,imshow(data)和imshow(data,[])的结果很不一样,因为此时.img文件存储的不是1-256的颜色索引,因此需要将data的值在颜色空间1-256之间做线性映射。

猜你喜欢

转载自blog.csdn.net/zhuiyuanzhongjia/article/details/79625155