Beispiel #1
0
        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);
        }