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

kezunhai@gmail.com

http://blog.csdn.net/kezunhai

八方向浮雕根据不同的雕刻方向,产生不同方向的浮雕效果。相对来说,八方向浮雕比调和浮雕的效果更好,图像整体比较平滑,线条更为流畅,但是凹凸感不强,轮廓不明显。

实现原理:在处理八方向浮雕时,将某一个像素与其八邻域的任一像素进行相减,然后加上一个偏移值。该像素的八邻域又根据方位称为西北方(左上)、北方(上)、东北方(右上)、东方(右)、东南方(右下)、南方(下)、西南方(左下)和西方。而在常见的数字图像处理书籍中,将西北方和东南方两种特效分别称为浮雕和雕刻。

算法实现较为简单,首先定义一个八方向的枚举类型变量,如下:

enum EMBOSS_DIRECTION
{N,NE,E,SE,S,SW,W,NW
};

算法代码如下:

// 八方向浮雕, SE(雕刻), NW(浮雕)
void PhotoShop::DiamondEmboss(Mat& img, Mat& dst, EMBOSS_DIRECTION Ed /* = SE */,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, sum;int ioffset = 0; // 根据方位来偏移int joffset = 0;  switch(Ed){case  N:ioffset = -1;joffset = 0;break;case NE:ioffset = -1;joffset = 1;break;case E:ioffset = 0;joffset = 1;break;case SE:ioffset = 1;joffset = 1;break;case S:ioffset = 1;joffset = 0;break;case SW:ioffset = 1;joffset = -1;break;case W:ioffset = 0;joffset = -1;break;case NW:ioffset = -1;joffset = -1;default:ioffset = 1;joffset = 1;break;}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 = getPixel(img, i, j, k) - getPixel(img, i-ioffset, j-joffset, k) +offset;if ( sum < 0) sum = -sum;if ( sum < 64) sum = 64;if ( sum > 255) sum = 255;               dstData[j*chns+k] = sum;                          }       }}
}

第一张东南方向的测试图:

第二张西南方向的图片:

第三张西北方向:

上面三个不同方向的差异,大家仔细观察下就可以明显感觉到,最后上一张调和浮雕,供对比使用:

哈哈,还是最后一张艺术气息比较浓厚点哈~

作者:kezunhai 出处:http://blog.csdn.net/kezunhai 欢迎转载或分享,但请务必声明文章出处。

PhotoShop算法实现进阶-浮雕滤镜-八方向浮雕(三十)相关推荐

  1. PhotoShop算法实现进阶-浮雕滤镜-灰度浮雕(三十一)

    PhotoShop算法实现进阶-浮雕滤镜-灰度浮雕(三十一) kezunhai@gmail.com http://blog.csdn.net/kezunhai 浮雕效果可谓花样百出,但他们主要是基于图 ...

  2. 【算法设计与分析】经典常考三十三道例题AC代码

    ❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...

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

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

  4. 矢量线八方向和全方向栅格化算法C#实现

    文章目录 引言 1算法 1.1矢量点的栅格化 1.1.1思想 1.1.2算法实现 1.2矢量线的栅格化 1.2.1八方向栅格化 思想 算法流程 算法实现 1.2.2 全路径矢量化 思想 算法流程 算法 ...

  5. 用OpenCV实现Photoshop算法(八): 可选颜色

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

  6. PGL图学习之图神经网络ERNIESage、UniMP进阶模型[系列八]

    PGL图学习之图神经网络ERNIESage.UniMP进阶模型[系列八] 原项目链接:fork一下即可:https://aistudio.baidu.com/aistudio/projectdetai ...

  7. 算法竞赛进阶指南 骑士放置

    4: 最大独立集 :选出最多的点,使得选出的点之间没有边. 求最大独立集:选出最小的点可以破坏所有的边 <==>最小点覆盖 <==>最大匹配数. 假设最大匹配数为m,共有n个点 ...

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

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

  9. 八十七、Python | 十大排序算法系列(上篇)

    @Author:Runsen @Date:2020/7/10 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

最新文章

  1. (6)javascript的程序控制结构及语句-----(1)条件判断
  2. Android Jetpack组件之ViewModel使用
  3. java代码写jsp读取,Java IO学习基础之读写文本文件-JSP教程,Java技巧及代码
  4. CTFshow 反序列化 web258
  5. 坚式计算机在线,小学数学竖式计算器
  6. CodeForces - 1534E Lost Array(bfs+交互)
  7. 网易云基于Prometheus的微服务监控实践
  8. python-OpenCV之numpy数组操作
  9. Ollydbg中F8的Bug
  10. Bailian2682 循环移动【模除】
  11. Matlab Tricks(六)—— 矩阵乘法的实现
  12. java版本的RtpStream
  13. ide进行php编程快捷键,PHP IDE phpstorm 快捷键
  14. 实现开通个人支付宝与微信扫码支付
  15. Vue全家桶学习笔记:Vue Router篇
  16. 中国故事 张亚勤 访谈
  17. 华为交换机eth口作用_华为的交换机有什么用
  18. MapReduce理解-深入理解MapReduce
  19. 第十五篇 项目整体管理__项目启动会议、项目目标
  20. VBS脚本病毒总结与分析

热门文章

  1. 常备软件及必要配置 - 换电脑或重装必备
  2. android 坦克,Android坦克大战游戏《坦克骑士 Tank Riders》
  3. 开源GIS平台空间数据管理与发布技术研究
  4. 屏幕鼠标键盘重复录制执行工具比拼:
  5. 有趣的计算机课作文,有趣的科学课作文(10篇)
  6. 抖音seo源码,抖音seo矩阵系统分发源码技术搭建
  7. KMPlayer show every frame timestamp
  8. 《TD开发笔记》TD是个啥?一起了解一下
  9. i奇艺高清播放器 v3.8.1.5 官方版
  10. java-php-python-ssm养老院管理系统计算机毕业设计