2

我正在尝试加载图像,但它显示错误消息Undefined function or method 'readimage' for input arguments of type 'char'.

我的调用函数在这里

 h=uicontrol(FigWin,...
 'Style','pushbutton',...
 'Position',[0,320,80,20],...
 'String','Load',...
 'Callback',...
 ['image1=loadimage;'...
 'subplot(AxesHandle1);'...
 'imagesc(image1);'...
 'title(textLoad);'...
 'colormap(gray);']);

我的调用函数如下

function image1=loadimage
    [imagefile1 , pathname]= uigetfile('*.bmp;*.BMP;*.tif;*.TIF;*.jpg','Open An Fingerprint image'); 
    if imagefile1 ~= 0 
        cd(pathname);
        image1=readimage(char(imagefile1));
        image1=255-double(image1);
    end
end

另一个问题,如果程序中有警告,是不是有问题?对不起,我是 Matlab 的新手。谢谢你。

4

2 回答 2

2

我只能将其重现为路径问题。

问题几乎可以肯定readimage.m不在路径上,而是位于您测试它的当前目录中。现在最简单的解决方案是imread直接使用而不是直接使用 wrapper readimage,但假设您想readimage稍后添加功能:

简单的解决方案是将目录添加readimage.m到您的路径(文件->设置路径->添加文件夹->使用 readimage.m 浏览到目录)。但是,如果您想测试这确实是问题,请确保您可以手动运行readimage('existing_image.jpg')(意味着您应该浏览到该目录),然后运行以下修改后的代码

function image1=loadimage
    [imagefile1 , pathname]= uigetfile('*.bmp;*.BMP;*.tif;*.TIF;*.jpg','Open An Fingerprint image'); 
    if imagefile1 ~= 0 
        image1=readimage([pathname imagefile1]);
        image1=255-double(image1);
end;

与原始代码的唯一区别是我们没有使用 cd(pathname) 来更改目录,而是将其合并到 readimage 命令本身中。

我打赌 cd() 命令的组合和它不在路径上的组合让你认为 readimage(w) 在路径上并且正在工作,而它实际上只是在当前目录中......直到cd() 命令已运行。

于 2012-07-02T14:02:21.160 回答
0

稍微重写你的函数:

function img = loadimage()
    [fname,pname] = uigetfile('*.bmp;*.tif;*.jpg', 'Open Fingerprint image');
    if pname==0, error('no file selected'); end

    img = imread( fullfile(pname,fname) );
    img = 255 - double(img);
end
于 2012-07-02T15:21:03.373 回答