static Mat doKernel(Mat img, Mat kernel) { Mat outputImg = new Mat(); int kernel_size = kernel.Cols; int pad = (kernel_size - 1) / 2; img.CopyTo(outputImg); MatOfByte mat = new MatOfByte(outputImg); var idx = mat.GetIndexer(); MatOfByte kernel_mat = new MatOfByte(kernel); var kernel_idx = kernel_mat.GetIndexer(); Console.WriteLine(kernel_mat.ToCvMat()); for (int k_row = 0; k_row < kernel_size; k_row++) // k - kernel { for (int k_col = 0; k_col < kernel_size; k_col++) { Console.WriteLine(kernel_idx[k_row, k_col]); } } float sum = 0; for (int c_row = pad; c_row < mat.Rows; c_row++) // c- center { for (int c_col = pad; c_col < mat.Cols - pad; c_col++) { sum = 0; for (int k_row = 0; k_row < kernel_size; k_row++) // k - kernel { for (int k_col = 0; k_col < kernel_size; k_col++) { sum += idx[c_row - pad + k_row, c_col - pad + k_col] * kernel_idx[k_row, k_col] * 1 / (kernel_size * kernel_size); var testShit = idx[c_row - pad + k_row, c_col - pad + k_col].ToString(); var testKernel = kernel_idx[k_row, k_col]; // Console.WriteLine(testShit + " " + testKernel); } } idx[c_row, c_col] = (byte)sum; } } return(outputImg); }