本文记录使用 MATLAB 读取图片并转换为二进制数据格式的方法,避免后面再做无用功。
Matlab 可以使用 textread 函数、fgetl 函数和 dlmread 函数来读取文本文件。
Matlab 可以使用 fread 函数来读取二进制文件。fread 函数返回一个矩阵,其中每个元素都是二进制文件中的一个值。您可以指定要读取的数据类型、数据格式、读取的起始位置和要读取的数据量。
Matlab 可以使用 imread 函数来读取图像文件,例如 .jpg 文件。imread 函数可以返回包含像素值的矩阵和一些元数据的结构体。
Matlab 可以使用 load 函数来读取 MATLAB 文件,并返回在文件中存储的所有变量。还可以使用 xlsread 函数来读取 Microsoft Excel 文件。这些函数还可以指定要读取的变量或工作表的名称。
常用的图像处理标准图片(Lena、cameraman等)获取地址:常用的图像处理标准图片
源码如下:
clear all
close all
% 读取图像
imdata = imread('Lena.bmp');
% 显示图像
imshow(imdata);
% 将图像转换为二进制格式
BinSer = dec2bin(imdata, 8);
% 将 BinSer 进行转置,使得每列表示一个像素值的二进制字符串。
BinSer = BinSer';
% 根据图像的大小创建一个文件名,文件名的格式为'binaryImg_M_N_K.txt',
% 其中M表示图像的行数,N表示图像的列数,K表示图像的通道数(对于灰度图像,
% 通道数为1)。
FileName = [num2str(size(imdata,1)), '_',num2str(size(imdata,2)),'_',num2str(size(imdata,3)),'.txt'];
% 打开文件 FileName,以写入(write)方式
fid = fopen(FileName,'w');
% 将 BinSer 中的数据按照字符形式写入到文件中。
fprintf(fid,'%c', BinSer(:));
% 关闭文件
fclose(fid);
% 创建一个新的图像显示窗口
figure;
% 从文件名中读取出图像的行数 M、列数 N 和通道数 K,并将它们存储在变量 mn 中
mn = sscanf(FileName, '%d_%d_%d');
M = mn(1); N = mn(2); K = mn(3);
% 以只读(read)方式打开文件 FileName。
fid = fopen(FileName, 'r');
% 从文件中读取数据,并将其存储在变量 data 中
data = fscanf(fid, '%c');
% 关闭文件
fclose(fid);
% 将 data 重新排列成每列 8 个字符的矩阵,表示每个像素值的二进制字符串
data1 = reshape(data, 8, length(data)/8);
% 将data1中的二进制字符串转换为对应的十进制表示,并将结果重新排列为
% M×N×K 的三维矩阵,其中 M 为行数,N 为列数,K 为通道数。
data2 = reshape(bin2dec(data1'), M, N, K);
% 显示转换后的图像数据
imshow(uint8(data2));
左图为原图片,右图为转换成二进制文件后再进行显示
可以看到结果一致,达到了预期的期望。
我的qq:2442391036,欢迎交流!