从keil中导出图像数据并且使用Matlab解析
最近有个项目,需要使用单片机和CCD采集图像数据,然后再该单片机上计算。图像处理的算法需要先在电脑上测试,但是电脑上并没有真实图像数据,所以需要使用单片机先采集几张图像,然后导出到电脑上。
这时候使用仿真器和keil进行debug,因为图像是保存在内存中的,所以图像的起始地址和终止地址都很清楚,这样就可以由keil导出txt文件,再由该文件就可以解析出图像数据。关于keil如何导出txt,请看这里。
假定我们现在已经有了导出的txt数据,接下来将会使用matlab解析该txt,生成jpg格式的图像,以便调试使用。
下面是matlab代码:
clear all; clc;
fid = fopen('E:\CAMERA1.TXT');%打开导出的txt
tline = fgetl(fid);
list_cell={};
while ischar(tline) %读取txt的每一行将其储存到一个元胞里
disp(tline);
tline = fgetl(fid);
list_cell = [list_cell;tline];
end
fclose(fid);%关闭文件
a = {};
for i=1:length(list_cell)-3%因为生成的txt尾部有些参数不要,所以加这个
a = [a;list_cell{i}];
end
b = a;
for i=1:length(a) %因为生成的txt中还有地址信息,但是比数据行要短,所以加这个把他去掉
if(length(a{i})<length(b{1}))
f=i;
d=i-(length(a)-length(b));
b(i-(length(a)-length(b))) = [];
end
end
for i=1:19200 %一行中除了数据还有别的信息,详情看生成txt那片文章,加这一步将数据取出来
b(i) = {b{i}(10:41)};
end
c=zeros(480,640); %图片大小为640*480,所以建立一个这么大的mat来存储
width = 1;
height = 1;
for i=1:19200 %将数据转为mat,
for k = 1:2:31
c(height,width) = hex2dec(b{i}(k:k+1)); %生成的txt都是十六进制,所以将其转为十进制
width = width+1;
if width>640
width=1;
height = height+1;
end
end
end
imwrite(mat2gray(c),'E:\img1.jpg') %保存图像