有没有简单的解决方案可以在 Qt 中为图像添加运动模糊?还没有找到任何关于模糊的好教程。我需要一些非常简单的东西,我可以理解,如果我能改变模糊角度,那就太好了。
问问题
1005 次
1 回答
2
Qt 没有运动模糊过滤器。我查看了代码QGraphicsBlurEffect
;它使用which 本身使用称为(指数模糊)QPixmapBlurEffect
的内部辅助方法。expblur
expblur
qt_blurrow
本身使用了两次一维模糊效果(X方向运动模糊,方法)。它将两个模糊之间的图像旋转 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 以轻松生成此类矩阵。]
于 2012-05-20T20:23:32.137 回答