在DE2提供的实例中,有一张tiger彩色图,格式为bmp。利用image converter可以将该图转为其它格式的数据。其中dat格式的文件可以供control panel使用。不过我比较感兴趣的是生成的txt文档。看image converter的pdf文档说明,该txt文档为原图的二进制图像。打开该txt文档后发现里面其实是许多0~255(00~FF)之间的像素值。洋洋洒洒一大堆的数值,不知道到底是多少。怎么显示该二进制图像呢?
动用MATLAB,读取该txt文件。
fid_in=fopen('e:\tiger_BW1.txt');
[data_in,count_in]=fscanf(fid_in,'%s');
运行程序后,发现count_in=38400
用size(data_in,2)可看出data_in中共有76800个字符,每个字符若用4位二进制数表示,则总共为307200,即分辨率为640×480。
到此,思路形成:每次读取160个字符,每个字符转换成4位二进制,这样构成的一行为640个数据。循环读取480次,则可以构成一个640*480的矩阵,也就是我们要的东东。
clear;clc
H=640;
V=480;
fid_in=fopen('e:\tiger_BW1.txt');%共76800个字符,每个字符用4位二进制数表示,总共为307200,即640×480
[data_in,count_in]=fscanf(fid_in,'%s');
data_out=zeros(V,H);
%j=1;
for j=1:V
%提取160个字符,共640位,作为1行
data_reg=data_in(1,160*j-159:160*j);
data_out(j,:)=Char2Matrix(data_reg);
end
function data_out=Char2Matrix(data_in)
%datain为字符串,长度为160
%dataout为行向量,1×640
data_out=zeros(1,640);
%data_out=zeros(1,12);
for i=1:160
data_reg=Char2Bin(data_in(1,i));
for j=1:4
if (data_reg(1,j)=='0')
data_out(1,4*(i-1)+j)=0;
elseif (data_reg(1,j)=='1')
data_out(1,4*(i-1)+j)=1;
end
end
end
function dataout=Char2Bin(datain)
%datain为字符量,dataout为二进制量
switch datain
case '0'
dataout='0000';
case '1'
dataout='0001';
case '2'
dataout='0010';
case '3'
dataout='0011';
case '4'
dataout='0100';
case '5'
dataout='0101';
case '6'
dataout='0110';
case '7'
dataout='0111';
case '8'
dataout='1000';
case '9'
dataout='1001';
case 'A'
dataout='1010';
case 'B'
dataout='1011';
case 'C'
dataout='1100';
case 'D'
dataout='1101';
case 'E'
dataout='1110';
case 'F'
dataout='1111';
end
利用imshow(data_out)显示出图