private int[,] GetIntegralMask(Mat mask) { var integral = new int[mask.Rows, mask.Cols]; var mat3 = new MatOfByte(mask); var indexer = mat3.GetGenericIndexer <int>(); for (var i = 0; i < mask.Rows; i++) { for (var j = 0; j < mask.Cols; j++) { var sum = 0; var substr = false; if (i != 0) { if (j != 0) { substr = true; } sum += integral[i - 1, j]; } if (j != 0) { sum += integral[i, j - 1]; } if (substr) { sum -= integral[i - 1, j - 1]; } sum += indexer[i, j] > 0 ? 1 : 0; integral[i, j] = sum; } } return(integral); }