未定义的函数或方法'readimage'用于'char'类型的输入参数

时间:2012-07-02 12:27:27

标签: matlab

我正在尝试加载图片,但它显示错误消息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的新手。谢谢。

2 个答案:

答案 0 :(得分:2)

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

问题几乎肯定是readimage.m不在路径上,而是位于您测试它的当前目录中。现在最简单的解决方案是直接使用imread而不是直接包装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()命令运行。

答案 1 :(得分: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