是否有简单的解决方案将运动模糊添加到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,或者具有由矩阵条目的总和来划分颜色。
对于给定的半径r和角度α,建立这个矩阵当你想允许任意角度α(不仅是90度步长)时很困难。 [编辑:请参阅评论3为这种矩阵的简单生成。]
如果我还记得,这个矩阵是一个卷积矩阵。在java上使用它,然后我需要所有角度的模糊,然后我拒绝它作为一种可能性。但找不到更好的东西。 但是,这个矩阵我可以得到比90步更多的角度。例如,使45个步骤的角度,只是差异矩阵成员将不是零?例如 'x 0 0 0 0 0 x 0 0 0 0 0 x 0 0 0 0 0 x 0 0 0 0 0 x' 我是对吗? 45度模糊? –
是的,这将是45度。但是,如果您的示例矩阵中的每个x都是相同(常数)的数字,则它将是线性模糊,看起来不自然。为了获得更好的质量,您应该对方形模糊使用线性函数(http://www.wolframalpha.com/input/?i=1-abs%28x%29+for+-1%3Cx%3C1)。我不知道指数模糊背后的数学问题,但我期待指数函数;)但我认为方形模糊的线性函数就足够了。 – leemes
嗯,我忘了说:为了生成一个矩阵,你可以作弊一点:让Qt在一个小的黑色图像((2r + 1)*(2r + 1)像素)中画一条白线。当然,你应该启用抗锯齿。对于线性函数,您可以在之后应用径向渐变模式(外部为黑色,内部为透明)。这就给了你我之前评论中描述的矩阵(像素的灰度值)。 ;) – leemes
- 1. 运动模糊图像的去模糊
- 2. Qt模糊错误
- 3. ListView滚动线条模糊
- 4. Qt模糊QMovie(来自gifs)
- 5. qt qtoolbutton图标模糊
- 6. 的Qt:模糊窗口
- 7. 模糊线性布局背景
- 8. GLSL运动模糊抖动的
- 9. 滚动时的运动模糊效果
- 10. 使用纯粹GLSL的2D运动模糊和高斯模糊
- 11. 用于对角线运动模糊的卷积矩阵
- 12. 用相机输入的实时性能去除运动模糊
- 13. 运动模糊与WebGL和three.js
- 14. 2D运动模糊解决方案
- 15. GLSL可以让Photoshop“运动模糊”吗?
- 16. 修复运动模糊从mpeg2video
- 17. 运动模糊方向识别DirectX
- 18. HTML5 Canvas运动模糊效果?
- 19. 无法运行简单的Qt示例程序,模糊错误
- 20. QT UI模糊后才重新绘制
- 21. 模糊的Qt快速文本
- 22. Qt Qpixmap生成模糊图像
- 23. 模糊QT中的QWidget效果
- 24. wpf线条显示模糊
- 25. 的Qt:元素可见和不模糊(无需滚动)
- 26. JQuery模糊动画
- 27. CSS3模糊动画
- 28. 移动模糊“a”
- 29. 模糊动画angularjs
- 30. 运营商模糊过载+
Qt本身没有运动模糊效果AFAIK。 QGraphicsBlurEffect是一个简单的半径模糊。然而,你可以看看[这个链接](http://http.developer.nvidia.com/GPUGems3/gpugems3_ch27.html),如果你想要在图像平面内均匀模糊,忽略深度部分。也许你可以创建自己的QGraphicsEffect。 – Bart