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

Posted

技术标签:

【中文标题】C++ OpenCV:应用二维卷积的最简单方法是啥【英文标题】:C++ OpenCV: What is the easiest way to apply 2-D convolutionC++ OpenCV:应用二维卷积的最简单方法是什么 【发布时间】:2014-10-13 23:02:19 【问题描述】:

我有一个我生成的内核过滤器,我想将它应用到我的图像,但我无法通过这样做得到正确的结果: 实际上我也可以使用不同的方法,因为我不熟悉 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;
    

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于C++ OpenCV:应用二维卷积的最简单方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac OS X 上分析数学密集型 C++ 应用程序以提高速度的最简单/最佳方法是啥?

OpenCV C++(五)----图像平滑

从 C++ 调用 Java 方法的最简单方法是啥?

在 Visual C++ 中执行查询的最简单方法是啥

C++:在 Windows 上使用 C++ 读写 BMP 文件的最简单方法是啥?

在 C++ 中读取格式化输入的最简单方法是啥?