我要做的事:根绝数据包画出的一张11470*2820的图片,对其进行分割,分割成164*20的多个小图片,然后画出来按顺序保存小图片,以建立图片数据库。用我的普通电脑win10的x64位系统安装的matlab2014a读数据包画图并按照顺序保存到指定路径,运行过程中所画的图正确,保存到路径的图打开看也是正确的。
问题是:用带GPU处理器的电脑(64位win7系统安装的matlab2014a,也就是两台电脑只差一个GPU)运行同一个程序,同一个.mat文件,运行时画出来的图和上面那台电脑一样,但是保存到路径的图片就是一片蓝。所有图片都是一个样子。
自己排错过程:猜想1:也许是带GPU的电脑运行速度太快,而保存图片需要一定时间,所以保存的没扫描好。但是加了一个延时程序pause(3),运行出图慢了,但是保存的依旧是全部是一样的结果。
猜想二:也许和保存指令有关系,用imwrite保存的图长的一样,但是改成saveas保存就正确,保存的都和当时运行出现的图一样。
我的代码如下:
clear;clc;
load test.mat %文件太大,传不上去,但是我觉得不运行也一样的,因为普通电脑电脑运行都是相同的结果,保存的图片都是正确的
%主要是i想知道为什么带GPU的电脑运行的结果图片是对的,但是保存的就是全蓝呢,怀疑是全部保存的一张图片
E_mat=E(1:11316,1:2820);
seg1=164*ones(69,1);
seg2=20*ones(1,141);
E_cell=mat2cell(E_mat,seg1,seg2);
p=1;
for i=1:10
for j=1:6
A=E_cell{i,j};
[ig_r,ig_c]=size(A);
tt = 1:ig_c;
yy = 1:ig_r;
figure(3);
set(gcf, 'position', [0 0 1000 500]); %set命令调整坐标属性
set(imagesc(tt,yy,A),'alphadata',~isnan(A));
len = floor((length(tt)-1)/4);
set(gca,'xtick',[tt(1),tt(1+len),tt(1+2*len),tt(1+3*len),tt(1+4*len)]);
axis xy;
colorbar;
caxis([-30,20]);
f=getframe; %getframe获得的是一个架构struct类型的数据
imwrite(f.cdata,['F:\zqm\test_picture\','test_',num2str(p),'.bmp'])
% saveas(gcf,['F:\zqm\test_picture\','test_',num2str(p),'.bmp'])
p=p+1;
end
end
运行结果:
带gpu电脑:左下角是运行过程中画出来的图片,现在显示的是最后一张的结果,右上角是保存路径中图片的结果(图一)
正常普通电脑:左下角运行过程图片,左上角保存路径文件夹图片(图二)
想知道,为什么GPU的电脑就保存不正确图
|
|