OpenCV-PS扩散效果(毛玻璃)
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
实现原理
PS的扩散效果可以产生类似毛玻璃质感的效果,使画面有些毛毛的感觉。其实现可通过操作像素三通道数值的方式实现,定义一个随机数器,将图像中任一点的数值赋值为,以该点为中心一定尺寸窗口(如3*3,5*5)内随机一个点的数值。
功能函数代码
// 扩散效果
cv::Mat Diffusion(cv::Mat src,int size)
{int row = src.rows;int col = src.cols;RNG rng;cv::Mat result = src.clone();for (int i = size; i < row- size; ++i){uchar* t = result.ptr<uchar>(i);for (int j = size; j < col- size; ++j){int tmp = rng.uniform(0, 2*size+1);t[3 * j] = src.at<uchar>(i - size + tmp / (2 * size + 1), 3 * (j - size + tmp % (2 * size + 1)));t[3 * j + 1] = src.at<uchar>(i - size + tmp / (2 * size + 1), 3 * (j - size + tmp % (2 * size + 1)) + 1);t[3 * j + 2] = src.at<uchar>(i - size + tmp / (2 * size + 1), 3 * (j - size + tmp % (2 * size + 1)) + 2);}}return result;
}
C++测试代码
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;cv::Mat Diffusion(cv::Mat src, int size);int main()
{cv::Mat src = imread("test.jpg");int size = 5;cv::Mat result = Diffusion(src,size);cv::imshow("original", src);cv::imshow("result", result);waitKey(0);return 0;
}// 扩散效果
cv::Mat Diffusion(cv::Mat src,int size)
{int row = src.rows;int col = src.cols;RNG rng;cv::Mat result = src.clone();for (int i = size; i < row- size; ++i){uchar* t = result.ptr<uchar>(i);for (int j = size; j < col- size; ++j){int tmp = rng.uniform(0, 2*size+1);t[3 * j] = src.at<uchar>(i - size + tmp / (2 * size + 1), 3 * (j - size + tmp % (2 * size + 1)));t[3 * j + 1] = src.at<uchar>(i - size + tmp / (2 * size + 1), 3 * (j - size + tmp % (2 * size + 1)) + 1);t[3 * j + 2] = src.at<uchar>(i - size + tmp / (2 * size + 1), 3 * (j - size + tmp % (2 * size + 1)) + 2);}}return result;
}
测试效果
适当地调整size,可以改变扩散的强度,进而带来不一样的质感。
如果函数有什么可以改进完善的地方,非常欢迎大家指出,一同进步何乐而不为呢~
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
OpenCV-PS扩散效果(毛玻璃)相关推荐
- opencv 滤镜效果php,OpenCV实现马赛克和毛玻璃滤镜效果
本文为大家分享了OpenCV实现马赛克和毛玻璃滤镜的具体代码,供大家参考,具体内容如下 一.马赛克效果 马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内随机选取的一个像素点的颜色代替 ...
- 用HTML5 Canvas 做擦除及扩散效果
2013年的时候曾经使用canvas实现了一个擦除效果的需求,即模拟用户在模糊的玻璃上擦除水雾看到清晰景色的交互效果.好在2012年的时候学习HTML5的时候研究过canvas了,所以在比较短的时间内 ...
- 互动照片墙效果之扩散效果(一)
互动照片墙效果之扩散效果(一) 项目中有一个需求:当点击到一个UI时,要把与它相邻的UI扩散出去,即周围清场. 我们来看一下解决思路: Unity3D中的位置是一个向量:假定A是点击到的UI,B是要扩 ...
- canvas 擦除动画_用HTML5 Canvas 做擦除及扩散效果
2013年的时候曾经使用canvas实现了一个擦除效果的需求,即模拟用户在模糊的玻璃上擦除水雾看到清晰景色的交互效果.好在2012年的时候学习HTML5的时候研究过canvas了,所以在比较短的时间内 ...
- android 点击扩散,Android水波纹扩散效果
先上图 囧!没有图片所以就拿了小安代替了 先看一下如何使用这个View .com.mybutton.view.RippleDiffuse android:layout_width="200d ...
- css 波纹扩散_html5 +css3 点击后水波纹扩散效果 兼容移动端
html5+ js +css3 点击后水波纹扩散效果 兼容移动端-幸凡学习网 }.center{text-align:center}.btn{position:relative;width:13em; ...
- 波纹扩散_C4D_动画amp;RS波纹扩散效果J_014
C4D-效果扩散效果,Redshift混合冰材质: 利用顶点贴图扩散效果制作,RS混合调用顶点贴图. 视频教程时长22分钟. 对象为可编辑对象才能用顶点贴图.冰结域的扩展是这个动画的重点,在这个模式下 ...
- android自定义控件几种,Android 自定义View一个控件搞定多种水波纹涟漪扩散效果 - CSDN博客...
效果图 实现思路 这个效果实现起来并不难,重要的是思路 此View满足了多种水波纹涟漪扩散效果,这要求它能满足很多的变化 根据上面的样式,可以看出此View需要满足以下变化 圆圈从中心可循环向外扩散 ...
- 一个炫酷的仿雷达扫描和扩散效果——自定义View就是这么简单
高仿雷达扫描效果和仿水波纹中心扩散效果,手把手教你撸一个炫酷的自定义view. 于亚豪的博客地址: blog.csdn.net/androidstar- 我们先看效果图吧 Markdown Markd ...
最新文章
- Redis源码解析——Zipmap
- 【Maven】maven的安装配置和ecplise结合
- 准确率(Precision)、召回率(Recall)以及综合评价指标(F1-Measure )
- 梦之队奥运30人大名单:詹皇库里甜瓜双少领衔
- jq之$(“:button“)
- php读取操作大文件
- 进程间通信 IPC interprocess communication
- 漂亮的英文字体 android,资深字体设计师私藏的10大APP,只怪你知道的太晚 !
- 最基本的25道深度学习面试问题和答案
- 输出希腊字母表java
- Spring+Mybatis整合
- Notion,程序员最后一款笔记软件
- 苹果手机点击输入框input 页面放大 超出屏幕问题
- 部门来了个测试工程师,一副小毛孩样,本以为很菜,谁想到...
- 前端教程:用 Canvas 编织璀璨星空图
- 汽车门阈值防抱死系统abs
- 浅谈仪器控制【1.Python与Labview/Labwindows】
- oracle官方网址
- App uni.downloadFile ios问题
- html 做笔记,HTML笔记(一)