Qt运动(线性)模糊



有没有简单的解决方案可以在Qt中为图像添加运动模糊?没有找到任何关于模糊的好教程。我需要一些非常简单的东西,我可以理解,如果我能改变模糊角度,那就太好了。

Qt没有运动模糊滤镜。我看了QGraphicsBlurEffect的代码;它使用QPixmapBlurEffect,而本身使用称为expblur(指数模糊(的内部帮助程序方法。

expblur本身使用一维模糊效果(X方向的运动模糊,方法qt_blurrow(两次。它将两个模糊之间的图像旋转 90 度,然后将其向后旋转。

所以实际上,Qt具有运动模糊效果,但这只是内部的。所以你需要写你自己的效果。为此,请查看 qt_blurrrow 的代码,您可以在 Qt 源代码中找到 src/gui/qpixmapfilter.cpp .这将为您提供良好的滤镜质量,因为它是指数模糊滤镜而不是线性滤镜。

如果你不想深入Qt源代码,那就把这个伪代码作为一个开始:

foreach pixel (x, y) in image {
    for dx = -r to r with x+dx within image {
        for dy = -r to r with y+dy within image {
            Add pixel (x+dx, y+dy) of the source image with ↩
            factor (matrix[dx, dy]) to the target image.
        }
    }
}

其中矩阵可以这样定义(对于半径为 2 的水平运动模糊(:

0   0   0   0   0
0   0   0   0   0
0.1 0.2 0.4 0.2 0.1
0   0   0   0   0
0   0   0   0   0

请注意,所有条目的总和必须为 1,否则必须将颜色除以矩阵条目的总和。

当您想要允许任意角度α(不仅是 90 度步长(时,为给定的半径 r 和角度α构建此矩阵很困难。[编辑:请参阅注释3,以便轻松生成此类矩阵。

相关内容

  • 没有找到相关文章

最新更新