PhotoShop算法实现进阶-浮雕滤镜-灰度浮雕(三十一)
kezunhai@gmail.com
http://blog.csdn.net/kezunhai
浮雕效果可谓花样百出,但他们主要是基于图像相邻像素的差值来实现的。对于大多数图像而言,相邻像素的差值可能并不大,图像就有可能变黑。因此,通过加上一个偏移量,也就是调和浮雕和八方向浮雕中Offset,这个Offset也就称为浮雕的底色或背景色。灰度浮雕比八方向浮雕效果更佳,图像轮廓更分明,凹凸感更强烈,给人一种富有立体感的视觉冲击。
灰度浮雕也是基于一种模板运算,与前两种浮雕效果不同的是,灰度浮雕对模板个元素进行三级运算处理,然后进行卷积运算,最后将图像灰度化。
实现代码:
void PhotoShop::GrayEmboss(Mat& img, Mat& dst,double angle/* = 30*/, int offset/* = 127 */)
{if ( dst.empty())dst.create(img.rows, img.cols, img.type()); int height = img.rows;int width = img.cols;int chns = img.channels();int border = 1;int i, j, k, p, q, index;double sum;// 根据三角函数求模板double radian = angle*PI/180.0;double dKernel[] = // 模板系数{cos(radian + PI/4), cos(radian + PI/2), cos(radian + 3.0*PI/4.0),cos(radian), 0, cos(PI),cos(radian - PI/2), cos(radian - PI/2), cos(radian - 3.0*PI/4.0)};for ( i= border; i<height-border; ++i){ unsigned char* dstData = (unsigned char*)dst.data+dst.step*i;for ( j=border; j<width-border; ++j){ for ( k=0; k<chns; k++){sum = 0;index = 0;for ( p=-border; p<=border; p++){for ( q = -border; q<=border; q++){sum += getPixel(img, i+p, j+q, k)*dKernel[index++];}} dstData[j*chns+k] = saturate_cast<uchar>(sum+offset); } }}
}
通过指定的角度,计算模板系数,然后进行模板操作,实现效果如图:
对上面的结果进行二值化后,如下图:
彩色浮雕与灰度浮雕的实现类似,如果将上述的模板系数改为:
double dKernel[] = // 模板系数{cos(radian + PI/4), cos(radian + PI/2), cos(radian + 3.0*PI/4.0),cos(radian), 1, cos(PI),cos(radian - PI/2), cos(radian - PI/2), cos(radian - 3.0*PI/4.0)};
则可以实现彩色浮雕,效果如下:
通过前面两篇调和浮雕、八方向浮雕和本文的这个灰度浮雕的测试效果来看,没看出这几者的具体差异在哪,针对实际需要的效果,应该对模板进行必要的调整并做一些必要的后处理工作。
作者:kezunhai 出处:http://blog.csdn.net/kezunhai 欢迎转载或分享,但请务必声明文章出处。
PhotoShop算法实现进阶-浮雕滤镜-灰度浮雕(三十一)相关推荐
- PhotoShop算法实现进阶-浮雕滤镜-八方向浮雕(三十)
PhotoShop算法实现进阶-浮雕滤镜-八方向浮雕(三十) kezunhai@gmail.com http://blog.csdn.net/kezunhai 八方向浮雕根据不同的雕刻方向,产生不同方 ...
- PhotoShop算法实现高级篇-剪纸艺术滤镜(三十二)
PhotoShop算法实现高级篇-剪纸艺术滤镜(三十二) kezunhai@gmail.com http://blog.csdn.net/kezunhai 剪纸是中国古代乃至今日的传统艺术,它的团简单 ...
- PhotoShop算法实现高级篇--色彩特效(三十五)
PhotoShop算法实现高级篇--色彩特效(三十五) kezunhai@gmail.com http://blog.csdn.net/kezunhai Photoshop中有很多色彩特效,本文介绍几 ...
- PhotoShop算法实现高级篇--畸变特效(三十七)
PhotoShop算法实现高级篇--畸变特效(三十七) kezunhai@gmail.com http://blog.csdn.net/kezunhai 再来介绍几种类似挤压的效果, ...
- 【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针
之前的学习数组的文章中,已经知道一维数组作为函数参数的时候,最终会被编译器编译为指针.今天来看看二维数组的情形 文章目录 1 为什么C语言中的数组作为函数参数会退化为指针? 2 二维数组作为函数参数如 ...
- Pillow浮雕滤镜
今天介绍一下Pillow模块中的浮雕滤镜,让你的图片瞬间高大上起来.代码如下: from PIL import Image from PIL import ImageFilterimg = Image ...
- 用OpenCV实现Photoshop算法(九): 高反差保留
系列文章: 用OpenCV实现Photoshop算法(一): 图像旋转 用OpenCV实现Photoshop算法(二): 图像剪切 用OpenCV实现Photoshop算法(三): 曲线调整 用Ope ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 93. 递归实现组合型枚举:递归与递推、dfs、状态压缩
文章目录 题目解答 题目链接 题目解答 分析: 此题和笔者另一篇博文很像,只不过是限定了个数.<算法竞赛进阶指南>打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归.二进 ...
- html一张图片用两种滤镜,HTML图片CSS滤镜—灰度效果
this.p={ m:2, b:2, loftPermalink:'', id:'fks_082065087087086069087082087095083084084067083083082065' ...
最新文章
- web-view里面的网页能请求未配置的request域名吗
- 阿里技术嘉年华-aDev内容感悟
- MFC使用CCommandLineInfo处理命令行
- python绘制时间轴_MatPlotLib动态时间轴
- hdu-5583 Kingdom of Black and White(数学,贪心,暴力)
- 中缀表达式转后缀表达式(非常简单易懂)
- 机器学习建模商务合作
- SpringClould之Eureka原理详解
- Linux查询本机的内网IP和外网IP
- MySQL窗口函数 DENSE_RANK函数
- java怎么读取docx文件_java – 如何显示或读取docx文件
- 校招总结--建议全文背诵
- iPhone7可以共享热点给多少设备使用呢?
- maven 跳过单元测试打包
- Android 学习之垂直切换的圆角 Banner 和垂直指示器
- win10自动修复处理方法
- 冲破测试职业天花板--《笑傲测试》读后感
- Treasure Island(简单图论题)
- DELPHI中如何删除已经注册的MIDAS
- 计算机原理及接口技术题目,微机原理及接口技术-习题答案
热门文章
- docker 改host_Docker容器修改端口映射
- 计算机无法打开pdf文件格式,pdf格式的文件打不开 [电脑打不开pdf格式文件怎么回事]...
- Snippets 使用
- 【prometheus】计算CPU使用率
- 经验分享 | 我的八股文学习路线及攻略
- BAT文件的编写及使用
- 支持向量机(SVM)MATLAB 实例讲解,及选择训练方式使误差率尽可能减为0
- No qualifying bean of type ‘com.xxx.xx.service.xxService‘ available: expected at leas
- NEUQ ACM预备队训练-week5(图的基础存图和dfs)
- Java必背基础词汇