jasy 发表于 2007-5-16 16:30

帮我调试下图象在AXES显示的程序

:@) function openimage
%获取handles中的数据
handles=guidata(gcbf);
%打开图像文件
=uigetfile(...
    {'*.jpg;*.jpeg;*.tif;*.bmp;*.eps','All Image Files(*.jpg,*.jpeg,*.tif,*.bmp,*.eps)';
    '*.jpg','JPG-files(*.jpg)';...
    '*.jpeg','JPEG-files(*.jpeg)';...
    '*.tif','TIF-files(*.tif)';...
    '*.bmp','BMP-files(*.bmp)';...
    '*.eps','EPS-files(*.eps)';...
    '*.*','All Image Files(*.*)'},...
    '选择图像文件','untitled.jpg',...
    'multiselect','off');
if isequal(filename,0)||isequal(filepath,0)
    return;
else
    filefullpath=fullfile(filepath,filename);
    s1=imread(filefullpath);
    axes(handles.axes1);
    h_axes=axes('position',,'visible','on');      
    imshow(s1);   
end
这是我打开图象的M文件,运行后界面先弹出两个FIGURE,打开图像后不能在指定的AXES1上显示,程序到底哪里出错啦啊?大家帮帮忙。
2.另外我的AXES2是用做处理后显示的,我在菜单栏里有预处理的灰度化选项,附件里有灰度化程序,我直接在CALLBACK 里输入吗?

eight 发表于 2007-5-16 16:36

原帖由 jasy 于 2007-5-16 16:30 发表 http://www.chinavib.com/forum/images/common/back.gif
:@) function openimage
%获取handles中的数据
handles=guidata(gcbf);
%打开图像文件
=uigetfile(...
    {'*.jpg;*.jpeg;*.tif;*.bmp;*.eps','All Image Files(*.jpg,*. ...

在handles里面需要建立 axis 控件吧。建议看看关于 GUI 的精华贴

jasy 发表于 2007-5-16 16:44

我试过handles=guidata(gcbf);这句要不要结果都一样的?axis 控件?:@o 论坛的那些精华贴上午一直在看,也试了下。始终是没调试好,你能说得具体些吗?麻烦了....:@)

jasy 发表于 2007-5-17 13:52

关于两个AXES的图像句柄传递问题

:@) 我在AXES1上打开图像文件才程序如下:function openimage
%打开图像文件
handles = guidata(gcbf);
=uigetfile(...
    {'*.jpg;*.jpeg;*.tif;*.bmp;*.eps','All Image Files(*.jpg,*.jpeg,*.tif,*.bmp,*.eps)';
    '*.jpg','JPG-files(*.jpg)';...
    '*.jpeg','JPEG-files(*.jpeg)';...
    '*.tif','TIF-files(*.tif)';...
    '*.bmp','BMP-files(*.bmp)';...
    '*.eps','EPS-files(*.eps)';...
    '*.*','All Image Files(*.*)'},...
    '选择图像文件','untitled.jpg',...
    'multiselect','off');
if isequal(filename,0)||isequal(filepath,0)
    return;
else
    filefullpath=fullfile(filepath,filename);
    fimg=imread(filefullpath);
    axes(handles.axes1);
    imshow(fimg);   
end
后来从别的例子上个找来了下面句柄加了上去:
origimg.fimgdata=fimg;
origimg.fimgpath=filefullpath;
origimg.fimgname=filename;
handles.data.origimg=origimg;
guidata(handles.hdata.hdls_figCJ14.thCJ14,handles);
 
然后在灰度化处理的程序上例子的程序是:
function dip_test_pre_rgb2gray

handles=guidata(gcbf);
hj_rgb=handles.data.origimg.fimgdata;
hj_gray=rgb2gray(hj_rgb);
imshow(hj_gray);
handles.data.origimg.hj_gray=hj_gray;
guidata(handles.hdata.hdls_figmain.thmain,handles);
guidata(gcf,handles);

我看了下然后把程序自己改成:
function rgb2gray
handles=guidata(hObject, eventdata, handles)
get(handles.axes1);
handles=guidata(gcbf);
hf_gray=rgb2gray(fimg);
axes(handles.axes2)
imshow(hf_gray);目的是在在AXES上显示。

我的GUI是用GUIDE设计的,在自动生成的M文件上,我按照例子的程序,自己在结尾修改添加了:

%在handles中保存数据
hdls_figCJ14=guihandles(CJ14);
handles.hdata.hdls_figCJ14=hdls_figCJ14;
guidata(CJ14,handles);


综上,调试超出了我的能力范围,我下一步要解决的滤波,锐化都要遇到类似问题。我有下列疑问:
1.这些句柄在两个AXES上是怎样传递的?就一句handles=guidata(gcbf)可以完成吗/有些人说用GET语句。
2.自动生成的M文件允许自己在上面修改吗?我在里边添加handles的保存语句有没必要?
3.是不是每编写一个CALLBACK的M文件都应该养成保存句柄以便继续操作的习惯?
谢谢。同时我要说的是精华贴子已经看过了。:handshake :handshake
页: [1]
查看完整版本: 帮我调试下图象在AXES显示的程序