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算法实现进阶-浮雕滤镜-灰度浮雕(三十一)相关推荐

  1. PhotoShop算法实现进阶-浮雕滤镜-八方向浮雕(三十)

    PhotoShop算法实现进阶-浮雕滤镜-八方向浮雕(三十) kezunhai@gmail.com http://blog.csdn.net/kezunhai 八方向浮雕根据不同的雕刻方向,产生不同方 ...

  2. PhotoShop算法实现高级篇-剪纸艺术滤镜(三十二)

    PhotoShop算法实现高级篇-剪纸艺术滤镜(三十二) kezunhai@gmail.com http://blog.csdn.net/kezunhai 剪纸是中国古代乃至今日的传统艺术,它的团简单 ...

  3. PhotoShop算法实现高级篇--色彩特效(三十五)

    PhotoShop算法实现高级篇--色彩特效(三十五) kezunhai@gmail.com http://blog.csdn.net/kezunhai Photoshop中有很多色彩特效,本文介绍几 ...

  4. PhotoShop算法实现高级篇--畸变特效(三十七)

             PhotoShop算法实现高级篇--畸变特效(三十七) kezunhai@gmail.com http://blog.csdn.net/kezunhai 再来介绍几种类似挤压的效果, ...

  5. 【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针

    之前的学习数组的文章中,已经知道一维数组作为函数参数的时候,最终会被编译器编译为指针.今天来看看二维数组的情形 文章目录 1 为什么C语言中的数组作为函数参数会退化为指针? 2 二维数组作为函数参数如 ...

  6. Pillow浮雕滤镜

    今天介绍一下Pillow模块中的浮雕滤镜,让你的图片瞬间高大上起来.代码如下: from PIL import Image from PIL import ImageFilterimg = Image ...

  7. 用OpenCV实现Photoshop算法(九): 高反差保留

    系列文章: 用OpenCV实现Photoshop算法(一): 图像旋转 用OpenCV实现Photoshop算法(二): 图像剪切 用OpenCV实现Photoshop算法(三): 曲线调整 用Ope ...

  8. 《算法竞赛进阶指南》打卡-基本算法-AcWing 93. 递归实现组合型枚举:递归与递推、dfs、状态压缩

    文章目录 题目解答 题目链接 题目解答 分析: 此题和笔者另一篇博文很像,只不过是限定了个数.<算法竞赛进阶指南>打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归.二进 ...

  9. html一张图片用两种滤镜,HTML图片CSS滤镜—灰度效果

    this.p={ m:2, b:2, loftPermalink:'', id:'fks_082065087087086069087082087095083084084067083083082065' ...

最新文章

  1. web-view里面的网页能请求未配置的request域名吗
  2. 阿里技术嘉年华-aDev内容感悟
  3. MFC使用CCommandLineInfo处理命令行
  4. python绘制时间轴_MatPlotLib动态时间轴
  5. hdu-5583 Kingdom of Black and White(数学,贪心,暴力)
  6. 中缀表达式转后缀表达式(非常简单易懂)
  7. 机器学习建模商务合作
  8. SpringClould之Eureka原理详解
  9. Linux查询本机的内网IP和外网IP
  10. MySQL窗口函数 DENSE_RANK函数
  11. java怎么读取docx文件_java – 如何显示或读取docx文件
  12. 校招总结--建议全文背诵
  13. iPhone7可以共享热点给多少设备使用呢?
  14. maven 跳过单元测试打包
  15. Android 学习之垂直切换的圆角 Banner 和垂直指示器
  16. win10自动修复处理方法
  17. 冲破测试职业天花板--《笑傲测试》读后感
  18. Treasure Island(简单图论题)
  19. DELPHI中如何删除已经注册的MIDAS
  20. 计算机原理及接口技术题目,微机原理及接口技术-习题答案

热门文章

  1. docker 改host_Docker容器修改端口映射
  2. 计算机无法打开pdf文件格式,pdf格式的文件打不开 [电脑打不开pdf格式文件怎么回事]...
  3. Snippets 使用
  4. 【prometheus】计算CPU使用率
  5. 经验分享 | 我的八股文学习路线及攻略
  6. BAT文件的编写及使用
  7. 支持向量机(SVM)MATLAB 实例讲解,及选择训练方式使误差率尽可能减为0
  8. No qualifying bean of type ‘com.xxx.xx.service.xxService‘ available: expected at leas
  9. NEUQ ACM预备队训练-week5(图的基础存图和dfs)
  10. Java必背基础词汇