C ++ OpenCV:应用二维卷积的最简单方法是什么

时间:2014-10-13 23:02:19

标签: c++ opencv visual-c++

我有一个我生成的内核过滤器,我想将它应用到我的图像,但是我无法通过这样做得到正确的结果: 实际上我也可以使用不同的方法因为我不熟悉opencv我需要帮助谢谢。

channel [c]是读取的图像;

int size = 5; // Gaussian filter box side size
double gauss[5][5];

int sidestp = (size - 1) / 2;

//我有一个生成高斯核滤波器的函数

float sum = 0;
for (int x = 1; x < channels[c].cols - 1; x++){
    for (int y = 1; y < channels[c].rows - 1; y++){
        for (int i = -size; i <= size; i++){
            for (int j = -sidestp; j <= sidestp; j++){
                sum = sum + gauss[i + sidestp][j + sidestp] * channels[c].at<uchar>(x - i, y - j);
            }
        }
        result.at<uchar>(y, x) = sum;
    }
}

2 个答案:

答案 0 :(得分:2)

OpenCV有一个内置函数filter2D,可以为你做这个卷积。 您需要提供源和目标映像,以及自定义内核(作为Mat)和更多参数。如果它仍然困扰你,请参见this

答案 1 :(得分:2)

只是要添加到上一个答案,因为您正在执行高斯模糊,您可以使用OpenCV GaussianBlur(检查here)。与filter2D不同,您可以使用标准偏差作为输入参数。