0

我在 matlab 中声明了一个类,这里​​是构造函数和函数。

function Ri = RGBimages(datadir)
    if(isempty(dir(datadir)))
        warning([datadir, ' is empty']);
        return;
    end
    Ri.dataSrc=datadir;
    Ri.twoEnds = load([datadir,'\seIndex.txt']);
    Ri.startFrame = Ri.twoEnds(1);
    Ri.endFrame = Ri.twoEnds(2);
    Ri.numberOfFrames=Ri.twoEnds(2)-Ri.twoEnds(1)+1;
    Ri.faceLmks = zeros(68,2,Ri.numberOfFrames);
end

function obtainFaceLmks(Ri)
    indx=1;
    for i = Ri.startFrame;%:Ri.endFrame
        imstr = [Ri.dataSrc,'\rgb_',num2str(i),'.png'];
        [status,result] = system(['fitD -m src\my.amf -h src\haarcascade_frontalface_alt2.xml -i ',imstr,' -n 30']);
        if(status==-1)
            warning(result);
        else
            temp=flHelper(result(1:size(result,2)-59));
            Ri.faceLmks(:,:,indx)=temp;
        end
        indx=indx+1;
    end
    return;
end

然后我这样做:

ims = RGBimages('data\a01_s01_e01');

ims.obtainFaceLmks();

而且似乎ims的属性(ims.faceLmks)没有改变,为什么?

谢谢你的帮助

4

2 回答 2

2

值类是按值传递的。因此,方法应该返回(更新的)类实例,您需要捕获它。换句话说,方法定义应该是

function Ri = obtainFaceLmks(Ri)

你会调用这个方法

ims = ims.obtainFaceLmks();

句柄类通过引用传递。因此,方法不需要返回更新后的类实例,也不需要捕获它。但是,您需要继承自handle,并且您需要实现一个复制方法来复制一个类实例;分配给另一个变量将不起作用。

有关更多信息,请参阅文档

于 2012-07-04T00:12:01.220 回答
0

这个类应该被继承来处理,这样它就可以改变自己的值,否则它只是一个“值类”,只能通过返回一些东西来改变它的值。

于 2012-07-03T23:15:45.080 回答