OpenCV - 如何实现逐渐模糊图像的效果?

3

我想在C ++中使用OpenCV实现图像模糊效果,例如以下图片中的效果:

但我不知道如何实现。

我尝试使用OpenCV中的cvSmooth()函数,但无法实现我想要的渐变模糊效果。

我该怎么办?


你能再解释一下吗? - Dieter Meemken
我猜你在说的是GaussianBlur(),除非你正在使用一个(相当)旧版本的OpenCV。就像Dieter所说,问题出在哪里呢? - Soltius
3
据我所知,在OpenCV中没有直接可用的函数。你需要自己编写代码。这并不太难,只需对图像的一小部分行应用模糊效果,并逐渐增加参数,直到达到图像底部即可。 - kebs
你可以使用带有每像素依赖滤波器大小的高斯模糊。但我猜这个实现可能不太高效。 - Micka
1个回答

2
您可以使用GaussianBlur()函数。假设您将SigmaXSigmaY参数的值设置为0,则滤波器核的大小对应于平滑的程度——较大的核意味着图像更加平滑。
现在,您应该将图像分成行组(包含1个或多个行),将它们视为单独的图像,并对每个图像应用GaussianBlur(),并随着每个连续行或行组逐渐减小其核大小。
根据您想要实现的结果,您必须调整参数,如初始和最终核大小、大小递减速度、每组中的行数以及每组行是否具有相同的大小(例如,如果某次迭代的核的大小为NxN,则可以将其应用于包含N行的组 - 然后组的大小将是可变的,而顶部组将包含最多的行)。还要记得将图像边界视为特殊情况。 注意:如果您想将NxN过滤器应用于由N行组成的图像条带,则应采用ROI,其大小为(2N-1)xN,以包括边界像素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接