是否有简单的解决方案为Qt中的图像添加运动模糊?没有找到任何关于模糊的好教程。我需要一些非常简单的东西,我能理解,如果能改变模糊角度,我会非常好。
答案 0 :(得分:2)
Qt没有运动模糊滤镜。我查看了QGraphicsBlurEffect
的代码;它使用QPixmapBlurEffect
,它本身使用一个名为expblur
的内部辅助方法(指数模糊)。
expblur
本身使用一维模糊效果(X方向的运动模糊,方法qt_blurrow
)两次。它将两个模糊之间的图像旋转90度,然后将其旋转回来。
实际上,Qt 具有运动模糊效果,但这只是内部效果。所以你需要写自己的效果。要执行此操作,请查看qt_blurrrow
的代码,您可以在src/gui/qpixmapfilter.cpp
的Qt源代码中找到该代码。这将为滤镜提供良好的质量,因为它是一个指数模糊滤镜而不是线性滤镜。
如果您不想深入了解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,以便轻松生成此类矩阵。]