Есть ли простое решение добавить смазывание изображения к изображению в Qt? Не нашли хорошего урока о размытии. Мне нужно что-то действительно простое, что я мог понять, и было бы очень хорошо, если бы я мог менять размытия.Qt motion (linear) blur
ответ
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 градусов шагов). [EDIT: см. Комментарий 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. Android motion motion blur effect
- 2. Motion Blur с SCNTechnique
- 3. 2D motion blur solutions
- 4. GLSL Motion Blur Jittering
- 5. ActionScript Tweening with Motion Blur
- 6. blur while motion in kineticjs
- 7. 2D motion blur и gaussian blur, используя чисто GLSL
- 8. OpenGL motion blur без накопительного буфера
- 9. Emulationment Motion Blur на OpenGL ES
- 10. Imagick motion blur на композитном, прозрачном изображении
- 11. Motion Blur с WebGL и three.js
- 12. Как применить motion-blur в javascript/jquery?
- 13. Восстановление изображения испорчены гауссовой и Motion Blur
- 14. Матрица свертки Motion Blur с учетом угла и величины
- 15. Добавить motion blur to navbar text при загрузке карусели Bootstrap
- 16. Обработчик событий внутри тега Motion Motion React-Motion проигнорирован
- 17. libVLC и blur videos
- 18. Что означает ошибка Motion Motion 107?
- 19. GLSL Motion Blur Post Processing, 2 текстуры, идущие в шейдер, одинаковы
- 20. opencv motion tracker с идентификацией
- 21. Javascript Blur
- 22. SVG background blur with polygon
- 23. Weird Shadow effect на CSS Blur
- 24. Flash motion tween
- 25. Структура из Motion Visualizer
- 26. Jerky Lerp motion
- 27. Leap Motion Custom Gestures
- 28. Physx Dynamic Actor Motion
- 29. Java Processing Projectile Motion
- 30. Robot Motion в Python
Qt сам по себе не имеет эффекта размытия движения AFAIK. QGraphicsBlurEffect - это простое размытие с радиусом. Однако вы могли бы взглянуть на [эту ссылку] (http://http.developer.nvidia.com/GPUGems3/gpugems3_ch27.html), игнорируя раздел по глубине, если хотите ровное размытие внутри плоскости изображения. Возможно, вы сможете создать свой собственный QGraphicsEffect. – Bart