在这里使用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);
答案 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;