17.3.1.4 浮雕

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

浮雕的算法主要有以下两种:

1、相邻两个像素的红绿蓝颜色分量值差再加上一个常数。例如:从第二列像素开始,下一列的红绿蓝颜色分量值等于该列红绿蓝颜色分量值减去上一列的红绿蓝颜色分量,再加上128。如果小于0,那么等于0,如果大于255,那么等于255。

原图像:颜色值color=(R,G,B)

RNew=R(i,j)-R(i-1,j)+128

GNew=G(i,j)-G(i-1,j)+128

BNew=B(i,j)-B(i-1,j)+128

第一列像素值不会有变化。

2、相邻两个像素的红绿蓝颜色分量值差的绝对值再加上一个常数。例如:从第二列像素开始,下一列的红绿蓝颜色分量值等于该行红绿蓝颜色分量减去上一列的红绿蓝颜色分量的绝对值,再加上128。如果小于0,那么等于0,如果大于255,那么等于255。

RNew=Abs(R(i,j)-R(i-1,j))+128

GNew=Abs(G(i,j)-G(i-1,j))+128

BNew=Abs(B(i,j)-B(i-1,j))+128

第一列像素值不会有变化。

【例 17.36浮雕算法一。

       //浮雕1private void btnEmboss1_Click(object sender, EventArgs e){Color pSourceColor1;Color pSourceColor2;Color pDestColor;Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);int R, G, B;int R1, G1, B1;int R2, G2, B2;for (int i = 0; i < sourceImg.Width; i++){for (int j = 0; j < sourceImg.Height; j++){//如果是图像第一列像素数据,那么使用灰度均值if (i == 0){pSourceColor1 = sourceImg.GetPixel(i, j);R1 = pSourceColor1.R;G1 = pSourceColor1.G;B1 = pSourceColor1.B;B = (R1 + G1 + B1) / 3;pDestColor = Color.FromArgb(B, B, B);destImg.SetPixel(i, j, pDestColor);}else{pSourceColor1 = sourceImg.GetPixel(i, j);R1 = pSourceColor1.R;G1 = pSourceColor1.G;B1 = pSourceColor1.B;pSourceColor2 = sourceImg.GetPixel(i - 1, j);R2 = pSourceColor2.R;G2 = pSourceColor2.G;B2 = pSourceColor2.B;R = R2 - R1 + 128;G = G2 - G1 + 128;B = B2 - B1 + 128;if( R < 0)R = 0;if( R > 255)R = 255;if( G < 0 )G = 0;if( G > 255)G = 255;if( B < 0)B = 0;if( B > 255)B = 255;pDestColor = Color.FromArgb(R, G, B);destImg.SetPixel(i, j, pDestColor);}}}picDest.Image = destImg;}

运行结果如下图所示:

 图17-40 浮雕处理一

【例 17.37浮雕算法二。 

       //浮雕2private void btnEmboss2_Click(object sender, EventArgs e){Color pSourceColor1;Color pSourceColor2;Color pDestColor;Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);int R, G, B;int R1, G1, B1;int R2, G2, B2;for (int i = 0; i < sourceImg.Width; i++){for (int j = 0; j < sourceImg.Height; j++){//如果是图像第一列像素数据,那么使用灰度均值if (i == 0){pSourceColor1 = sourceImg.GetPixel(i, j);R1 = pSourceColor1.R;G1 = pSourceColor1.G;B1 = pSourceColor1.B;B = (R1 + G1 + B1) / 3;pDestColor = Color.FromArgb(B, B, B);destImg.SetPixel(i, j, pDestColor);}else{pSourceColor1 = sourceImg.GetPixel(i, j);R1 = pSourceColor1.R;G1 = pSourceColor1.G;B1 = pSourceColor1.B;pSourceColor2 = sourceImg.GetPixel(i - 1, j);R2 = pSourceColor2.R;G2 = pSourceColor2.G;B2 = pSourceColor2.B;R = Math.Min(Math.Abs(R1 - R2) + 128, 255);G = Math.Min(Math.Abs(G1 - G2) + 128, 255);B = Math.Min(Math.Abs(B1 - B2) + 128, 255);pDestColor = Color.FromArgb(R, G, B);destImg.SetPixel(i, j, pDestColor);}}}picDest.Image = destImg;}

运行结果如下图所示:

 

 图17-41 浮雕处理二

 

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看 C# 教程 目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/477936.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大白话说说redux

redux的3个重要概念 store 就是用来存放应用的各种状态的action 就是用来描述应用发生了什么动作的&#xff0c;注意理解他是对动作的描述reducer 就是用来处理应用的动作&#xff0c;并且决定怎么去更新应用存放在store里面的状态。 redux的3个原则 应用的所有状态存储为re…

K8s进阶之路-核心概念/架构:

架构&#xff1a;Master/Node Master组件--主控节点{ 负责集群管理&#xff08;接收用户事件转化成任务分散到node节点上&#xff09;} Apiserver&#xff1a; 资源操作的唯一入口&#xff0c;提供认证、授权、API注册和发现等机制 Scheduler &#xff1a; 负责集群资源调度&am…

【Larry】英语学习笔记语法篇——非谓语动词和从句是一回事

目录 非谓语动词和从句是一回事 不定式&#xff1a;名词/形容词/副词 1、不定式 名词属性的不定式&#xff1a;作为主语、表语、宾语 形容词属性的不定式&#xff1a;作后置定语 副词属性的不定式&#xff1a;作状语 副词属性的不定式&#xff1a;作插入语 不定式的逻辑…

【动态规划专栏】专题一:斐波那契数列模型--------2.三步问题

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

OpenAI发布Sora,另一个层次的黑科技

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【lesson62】网络通信UdpSocket版

文章目录 UdpSocketUdpServer.hppUdpServer类成员变量解释成员函数解释 UdpServer的实现ServerIinit的实现socketbindhtonsinet_addr具体实现 ServerStart的实现recvfromsendtontohsinet_ntoa具体实现 ~UdpServer函数实现UdpServer.hpp整体完整代码 UdpServer.ccUdpClient.ccTh…

Windows 重启 explorer 的正确做法

目录 一、关于 Restart Manager 二、重启管理器实例 三、完整实现代码和测试 本文属于原创文章&#xff0c;转载请注明出处&#xff1a; https://blog.csdn.net/qq_59075481/article/details/136179191。 我们往往使用 TerminateProcess 并传入 PID 和特殊结束代码 1 或者…

【软考中级备考笔记】计算机体系结构

计算机体系结构 2月19日 – 天气&#xff1a;阴转小雪 1. 冯诺依曼计算机体系结构 冯诺依曼将计算机分为了五大部分&#xff0c;分别是&#xff1a; 控制器&#xff1a;主要负责协调指令到执行运算器&#xff1a;负责算数和逻辑运算存储器&#xff1a;负责存储在指令执行过程…

自定义Linux登录自动提示语

设置提示语的方式 在Linux系统中&#xff0c;可以通过修改几个特定的文件来实现在用户登录时自动弹出提示语。以下是几个常用的方法&#xff1a; 1. 修改/etc/issue文件&#xff1a; 这个文件用于显示本地登录前的提示信息 sudo vi /etc/issue在项目合作的时候&#xff0c;…

springboot-vue-供应商招投标采购在线询价管理系统

1. 技术栈 后端&#xff08;Spring Boot&#xff09;: 控制器&#xff08;Controller&#xff09;处理HTTP请求。 服务层&#xff08;Service&#xff09;处理业务逻辑。 数据访问对象&#xff08;DAO&#xff09;与MySQL数据库交互。 Spring Security用于权限控制。 前端&…

最短路径分析

路径分析参考地址 路径分析参考地址2 路径分析参考地址3 1 绘制线,添加snap+拓扑检查 2 融合线–矢量叠加-用线分割 3 打开pgadmin4 - 创建数据–query tool 4 postgis链接postgres,密码000000 add files导入数据后,geom改为the_geom, srd o改为 4326 options ,勾选 点击…

【软考高级信息系统项目管理师--第二十章:高级项目管理】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;软考高级–信息系统项目管理师 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 第二十章&#xff1a;高级项目管理 项目集管理项目组合管理组织级项目管理OPM&…