【问题标题】:OpenCV - How to achieve a gradual image blur effect? [duplicate]OpenCV - 如何实现渐变的图像模糊效果? [重复]
【发布时间】:2017-01-12 20:50:23
【问题描述】:

我想用C++中的OpenCV来实现渐变的图像模糊效果,比如这张图:

但我不知道该怎么做。 我在OpenCV中使用了cvSmooth()函数,但是无法实现我想要的渐变效果。

我该怎么办?

【问题讨论】:

  • 你能再解释一下吗?
  • 我猜您说的是 GaussianBlur(),除非您使用的是(相当)旧版本的 OpenCV。正如 Dieter 所说,有什么问题?
  • AFAIK,没有可以在 Opencv 中使用的直接函数。你必须自己写。这应该不会太难,只需在图像的一小组行上应用模糊,然后逐渐增加参数直到到达图像底部。
  • 您可以将高斯模糊与每像素相关的过滤器大小一起使用。但我想这不会有一个有效的实现。

标签: c++ opencv image-processing filtering


【解决方案1】:

您可以使用GaussianBlur()。假设您将 SigmaXSigmaY 参数的值设置为 0,则滤波器内核的大小对应于平滑程度 - 内核越大,图像越平滑。

现在,您应该将图像分成几组(包含 1 行或多行),将它们视为单独的图像,并对它们中的每一个应用 GaussianBlur(),每行减小其内核大小连续行或一组行。
根据您想要达到的结果,您必须调整参数,例如初始和最终内核大小、大小减小的速度、每组中的行数以及每组行的大小是否相同(例如如果某个迭代的内核大小为 NxN,您可以将其应用于 N 行组 - 那么组大小将是可变的,并且顶部组将包含最高行数)。另外,请记住将图像边界视为特殊情况。

注意:如果您想对包含 N 行的图像条应用 NxN 过滤器,则应采用大小为为 (2N-1)xN 以包含边界像素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    相关资源
    最近更新 更多