将GaussianBlur应用于单个像素

时间:2013-04-21 14:36:18

标签: c++ opencv blur gaussian

我正在使用OpenCV在C ++中编写应用程序,以将高斯滤镜应用于图像中的各个像素。例如,我遍历图像中的每个像素,如果它们匹配特定的RGB值,我想将高斯算法仅应用于那些像素,以便仅在图像的那些部分周围出现模糊。

但是,我很难找到办法做到这一点。 OpenCV库提供的GaussianBlur()功能只允许我模糊整个图像,而不是简单地将算法和内核一次应用于一个像素。有没有人对如何实现这一点有任何想法(例如,是否有另一种我不知道的方法)?我希望我不必自己编写整个算法来将其应用于单个像素。

2 个答案:

答案 0 :(得分:4)

我的一位朋友提出了一个很好的解决方案:

  • 克隆原始矩阵
  • GaussianBlur()应用于克隆
  • 将每个像素与RGB值进行比较
  • 如果匹配,则将原始像素替换为克隆的像素

无法相信这有多么简单。

答案 1 :(得分:1)

如果您只需要在几个像素上应用它,您可以自己编码高斯模糊。这比你想象的容易得多,只需几行。它是一个简单的stencil operator,其内核使用gaussian function。您所需要的只是像素及其邻居的坐标。

其余的是直截了当的。以下是高斯矩阵的示例,您可以轻松编码或使用高斯函数生成:

Example of Gaussian blur matrix

简而言之,它只是相邻值的加权平均值。