Qt运动(线性)模糊

标签 qt blur motion-blur

是否有简单的解决方案可以在 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 以轻松生成此类矩阵。]

关于Qt运动(线性)模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10674883/

相关文章:

c++ - Qt - 无法让 lambda 工作

image-processing - 带FFT的高斯模糊

c++ - 没有累积缓冲区的 OpenGL 运动模糊

javascript - 如何在 javascript/jquery 中应用运动模糊?

c++ - 如何组合许多连续图像来模拟逼真的运动模糊?

macos - 在 Mac 上安装 PySide : is there a working method?

c++ - 无法编译在 ARM 设备上使用的 Qt 程序

python - 如何控制QTableView Item的轮廓

javascript - 如果输入在模糊时为空,请取消选中行复选框?

ios - 更改 UINavigationBar 的模糊效果