用于加载文件的MATLAB类

时间:2012-11-26 19:44:22

标签: matlab matlab-class

在这里使用MATLAB初学者。我正在尝试编写一个将从文件夹中加载图像的类,这就是我所拥有的:

classdef ImageLoader
    %IMAGELOADER Summary of this class goes here
    %   Detailed explanation goes here

    properties
        currentImage = 0;
        filenames={};
        filenamesSorted={};
    end

    methods
        function imageLoader = ImageLoader(FolderDir)
            path = dir(FolderDir);
            imageLoader.filenames = {path.name};
            imageLoader.filenames = sort(imageLoader.filenames);
        end

        function image = CurrentImage(this)
            image = imread(this.filenames{this.currentImage});
        end

        function image = NextImage(this)
            this.currentImage = this.currentImage + 1;
            image = imread(this.filenames{this.currentImage});
        end
    end    
end

这就是我的称呼方式:

i = ImageLoader('football//Frame*');
image=i.NextImage;

imshow(image);

文件名为Frame0000.jpg,Frame0001.jpg ......等。 我希望构造函数加载所有文件名,以便我可以通过调用i.NextImage来检索下一个文件,但我无法使其正常工作。


搞定了。

类:

classdef ImageLoader
    %IMAGELOADER Summary of this class goes here
    %   Detailed explanation goes here

    properties(SetAccess = private)
        currentImage
        filenames
        path
        filenamesSorted;
    end

    methods
        function imageLoader = ImageLoader(Path,FileName)
            imageLoader.path = Path;
            temp = dir(strcat(Path,FileName));
            imageLoader.filenames = {temp.name};
            imageLoader.filenames = sort(imageLoader.filenames);
            imageLoader.currentImage = 0;
        end

        function image = CurrentImage(this)
            image = imread(this.filenames{this.currentImage});
        end

        function [this image] = NextImage(this)
            this.currentImage = this.currentImage + 1;
            image = imread(strcat(this.path,this.filenames{this.currentImage}));
        end
    end    
end

呼叫:

i = ImageLoader('football//','Frame*');
[i image]=i.NextImage;

imshow(image);

1 个答案:

答案 0 :(得分:1)

AFAIK您不能更改对象的状态(就像递增 currentimage指针时那样),而不是在结尾处显式更新对象本身的值。 AFAIK每个函数调用都传递对象byval,这意味着NextImage只修改this的本地副本(它不是当前对象的指针/引用,而是副本)。

因此,您可以做的是将您的方法编写为

  function [this image] = NextImage(this)
        this.currentImage = this.currentImage + 1;
        image = imread(this.filenames{this.currentImage});
  end

并将其命名为

 [i image]=i.NextImage;