C++, OpenCv: Member function not updating member variables -
i have class mainwindow contains function saveimagefile(). reads image, puts canvas object, class stores list of layer objects, each layer containing 2 opencv mats, pre-effects mat , post-effects mat.
in saveimagefile(), apply image effect lumatoalpha() on layer[1] of canvas. lumatoalpha() takes layer's pre-effects mat, performs operation on it, , stores in layer's post-effects mat. function tested. works.
however, when attempt post-effect mat, original mat. if lumatoalpha() did nothing @ all, or performed on totally different layer object.
i believe may have pointers, not confident. going wrong?
mainwindow class...
//member variables of mainwindow... canvas mcanvas; void mainwindow::saveimagefile() { mat mat = imread("c://picture.jpg), cv_load_image_grayscale); mcanvas.startcanvas(mat, canvas::bgra); mcanvas.getlayer(1).lumatoalpha(); mat canvasmat = mcanvas.getlayer(1).getposteffectmat(); imwrite("c://picture-result.png", canvasmat); //getposteffectmat returning wrong mat! }
canvas class...
//member variables of canvas... enum canvascolormode { grey, bgra }; canvascolormode mcanvascolormode; qlist<layer> mlayerset; canvas::canvas() { //empty constructor } layer canvas::getlayer(int index) { if(0 <= index && index < mlayerset.size()){ return mlayerset.at(index); } throw std::invalid_argument("layer index not in range"); } void canvas::startcanvas(mat base, canvascolormode mode) { mlayerset.clear(); if (base.channels() == 1 && mode == canvas::bgra){ cvtcolor(base, base, cv_gray2bgra); } else if (base.channels() > 1 && mode == canvas::grey){ cvtcolor(base, base, cv_bgra2gray); } layer layer00(makecheckmat(base.rows, base.cols, mode)); layer layer01(base); mlayerset.append(layer00); mlayerset.append(layer01); }
layer class...
//layer member variables mat mpreeffectmat; mat mposteffectmat; layer::layer(mat matprepost) { mpreeffectmat = matprepost; mposteffectmat = matprepost; } mat layer::getpreeffectmat() { return mpreeffectmat; } mat layer::getposteffectmat() { return mposteffectmat; } void layer::setpreeffectmat(mat mat) { mpreeffectmat = mat; } void layer::setposteffectmat(mat mat) { mposteffectmat = mat; qdebug() << "setposteffectmat"; } void layer::lumatoalpha() { mat pre = getpreeffectmat(); mat post= mat(pre.rows, pre.cols, cv_8uc4, scalar::all(0) ); //snip: converts luminence channel alpha, function tested //this works how expect to. question why //is change not reflected in post mat setposteffectmat(post); }
i guessing have member variable named mat
. hoping set value in function. however, have done in function define function local variable. member variable of same name not affected in function.
change line
// defines function local variable. mat mat = imread("c://picture.jpg), cv_load_image_grayscale);
to
// sets value of member variable. mat = imread("c://picture.jpg), cv_load_image_grayscale);
Comments
Post a Comment