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

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -