I am trying to operate 2 arrays (images) but my code -Opencv by example chapter 6- always crashes due to -I have found - a diffence value in the Mat Array property Step. One of the images -1st frame- comes from a directory and is read with
while (images.read(frame))... The other one had been read with light_pattern = imread(samples::findFile(light_pattern_file), 0);
When a function is called, to remove light, it crashes because "Sizes of input arguments do not match (The operation is neither 'array op array' ..."
Mat removeLight(Mat img, Mat pattern) { Mat aux;
// Require change our image to 32 float for division
Mat img32, pattern32;
img.convertTo(img32, CV_32F);
pattern.convertTo(pattern32, CV_32F);
// Divide the frame image by the pattern
//Sizes of input arguments do not match (The operation is neither 'array op array'
aux = 1 - (img32 / pattern32);
// Scale it to convert o 8bit format
aux = aux * 255;
// Convert 8 bits format
aux.convertTo(aux, CV_8U);
//equalizeHist( aux, aux );
// aux = pattern - img;
return aux;
}
Checking the structure of the input arrays, I found out that their Mat Step value differs. One being {960, 3}, the other one {320, 1}.
I have unsuccesfully tried to convert either one to fit the other one. Not possible yet. I would like to know whether I can read(frame) in a way that I get it, similar Step to the one that comes from the imread(file_pattern, 0).