sunminmin 发表于 2011-5-7 18:02

matlab读取.bmp文件显示图形?

用readbmp.m能读取dx.bmp显示图形,为什么我把I=imread('dx.bmp'); %读入一幅图片改成I=imread('map.bmp'); 把gao=;=meshgrid(1:0.1:5)做相应修改,还是不能读取map.bmp显示图形。提示??? Index exceeds matrix dimensions. Error in ==> dizhenyuce at 22   BW=II(:,:,1)+II(:,:,2)+II(:,:,3);

下面为readbmp.m文件:
I=imread('dx.bmp'); %读入一幅图片
%I=I(33:375,74:508,:); %须事先人工确定行标和列标

%提取坐标框内部分
I1=I(:,:,1); %提取红色灰度矩阵
pixel_black=(I1==0);
number_col=sum(pixel_black);
number_row=sum(pixel_black');
j1=find(number_col==max(number_col));
number_col(j1)=-1;
j2=find(number_col==max(number_col));

i1=find(number_row==max(number_row));
number_row(i1)=-1;
i2=find(number_row==max(number_row));
I=I(min(i1,i2):max(i1,i2),min(j1,j2):max(j1,j2),:);

%提取各等高线上颜色灰度值
II=I;
II(II==255)=0;
II(II>0)=255;
BW=II(:,:,1)+II(:,:,2)+II(:,:,3);
=find(BW);
up_row_id=min(row_id);
up_col_id=col_id(round(mean(find(row_id==up_row_id))));
left_col_id=min(col_id);
left_row_id=row_id(round(mean(find(col_id==left_col_id))));
pixel_BW=BW(up_row_id:left_row_id,up_col_id);
row_id=find(pixel_BW)-1+up_row_id;
yanse(:,1:3)=I(row_id,up_col_id,:);
%yanse=[0 0 143;
% 0 47 255
% 0 223 255
% 143 255 111
% 255 207 0
% 255 31 0
% 127 0 0]; %须事先人工确定各等高线颜色灰度值,用到了getpts函数

=size(I(:,:,1));
BW=zeros();
x_xishu=4/(n-1);
y_xishu=4/(m-1);
gao=;

%提取各等高线上点的三维坐标
xyz=[];
for i=1:7
BW1=BW;
BW1(I(:,:,1)==yanse(i,1)&I(:,:,2)==yanse(i,2)&I(:,:,3)==yanse(i,3))=1;
=find(BW1);
xyz=;
end
xyz=xyz(1:3:end,:);
xyz=;
x=xyz(:,1);
y=xyz(:,2);
z=xyz(:,3);

%产生网格数据,进行散乱节点插值拟合
=meshgrid(1:0.1:5)
z1=griddata(x,y,z,x1,y1,'v4');

=size(x1);

xyz1=


%画三维面图
figure
surf(x1,y1,z1)
shading flat; %各小曲面之间不要网格
zlim()
xlabel('X(单位:千米)')
ylabel('Y(单位:千米)')
zlabel('Z(单位:千米)')


怎样能读取任何.bmp文件显示图形,做到不需要每次读一个.bmp文件就要重新写一个代码?

ChaChing 发表于 2011-5-8 17:44

回复 1 # sunminmin 的帖子

Ref 12F, 常见的程序出错问题整理 http://forum.vibunion.com/thread-46001-1-1.html
(from http://forum.vibunion.com/home-space-uid-63979-do-blog-id-18250.html)

sunminmin 发表于 2011-5-8 18:05

回复 2 # ChaChing 的帖子

谢谢!
a = ;
b = ;
c = ;
plot3(a,b,c,'s')
用上面的代码能生成一个点,得到用一个小方格表示的,怎样写才能做到用黑点表示该点?

ChaChing 发表于 2011-5-8 18:16

回复 3 # sunminmin 的帖子

plot3(a,b,c,'k.','MarkerSize',12)

sunminmin 发表于 2011-5-8 18:22

回复 4 # ChaChing 的帖子

怎样用一条直线把两个点(1,2,3)(5,2,8)连起来?

ChaChing 发表于 2011-5-8 22:52

回复 5 # sunminmin 的帖子

我都已上高速公路跑了几百公里回工作地了, 楼主还在!?:@)
plot3(,,)

line(,,); view(3)

meiyongyuandeze 发表于 2011-5-8 23:17

回复 6 # ChaChing 的帖子

几百公里去工作地,好辛苦!

ChaChing 发表于 2011-5-8 23:24

回复 1 # sunminmin 的帖子

clc; clear; I=imread('dx.bmp'); I2=imread('map.bmp');
whos看看两者维数的不同(421x561x3, 698x1280)!

ChaChing 发表于 2011-5-8 23:30

回复 7 # meiyongyuandeze 的帖子

工作地与老家较远些! 不过相较内地应该还好:@)

sunminmin 发表于 2011-5-8 23:34

回复 6 # ChaChing 的帖子

呵呵,:@)我是想实现下面这个用三维坐标(x,y,z)画折线的功能1.        Engine *ep;
2.       
3.        if (!(ep = engOpen(NULL))) //打开Matlab引擎
4.       
5.        {
6.       
7.        MessageBox ("Can't start MATLAB engine", MB_OK);
8.       
9.        exit(-1);
10.        }
11.        mxArray *xx=mxCreateDoubleMatrix(1,6,mxREAL);
12.        mxArray *yy=mxCreateDoubleMatrix(1,6,mxREAL);
13.        mxArray *zz=mxCreateDoubleMatrix(1,6,mxREAL);
14.       
15.        double x[] ={0,1,2,3,4,5}, y[] = {0,1,4,9,16,25}, z[] = {1,2,3,4,5,6};
16.       
17.        engPutVariable(ep,"xx",xx);
18.        engPutVariable(ep,"yy",yy);
19.        engPutVariable(ep,"zz",zz);
20.       
21.        memcpy(mxGetPr(xx),x,6*sizeof(double));
22.        memcpy(mxGetPr(yy),y,6*sizeof(double));
23.        memcpy(mxGetPr(zz),z,6*sizeof(double));
24.       
25.        engEvalString(ep,"绘制6个三维点连成的线");???
26.        接下来用循环如何实现6点相连接???

就是利用matlab引擎在三维空间将这些坐标(x,y,z)所表示的点用黑点表示出来,前后两个点之间用直线连接,(0,0,1)连接(1,1,2)连接(2,4,3)连接(3,9,4)连接(4,16,5)连接(5,25,6),形成一条折线。

sunminmin 发表于 2011-5-9 00:20

回复 10 # sunminmin 的帖子

VC++与matlab混合编程利用matlab引擎做的想要实现在三维空间画折线的功能,上面的代码接下来该如何处理??

smtmobly 发表于 2011-5-11 20:51

plot3不行?

meiyongyuandeze 发表于 2011-5-11 21:09

一直很纳闷,楼主费劲周折在matlab中画出曲面后再求出曲面点,在用这些点画直线,好像程序都是在matlab中编写的!
页: [1]
查看完整版本: matlab读取.bmp文件显示图形?