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