17.3.1.6 自定义处理

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

模拟某款图像处理软件的处理,它只留下红色、绿色或者蓝色这样的单一颜色。

首先按照颜色划分了6个色系,分别是 红R、绿G、蓝B、紫P、黄Y、青A,其他N(也就是需要处理为灰度的颜色)。红、绿、蓝三原色分别对应颜色(R=255;G=0;B=0)、(R=0;G=255;B=0)和(R=0;G=0;B=255);紫色对应的是(R=255;G=0;B=255)、黄色对应的是(R=255;G=255;B=0);青色对应的是(R=0;G=255;B=255),其它颜色按照灰度处理用来衬托前面的6个色系颜色。

如果只是按照绝对的RGB颜色值来划分,例如单纯的取红色(R=255,G=0,B=0),其实在图像中是比较少见的,而且和红色接近的颜色(R=236,G=0,B=0),肉眼所见也属于红色范畴。考虑到某个色系颜色其实也是在三原色分量上交错分布(比如红色系并不只是在R分量上线性分布的),如果单纯的将R、G、B值记录到数据库来作为划分的依据,工作量比较大。因此使用以下简单的算法对几种颜色分布进行划分:

1、红色系分布:

R > 128,并且 R - G > 30,并且 R - B > 30。

2、绿色系分布:

G > 80,并且G - R > 5,并且(G - B > 20) 或 (B - G) < 10。

3、蓝色系分布:

B > 80,并且B - R > 50,并且B - G > 30。

4、紫色系分布:

R > 128,并且B > 128,并且R - G > 30,并且B - G > 30。

5、黄色系分布:

R > 140,并且G > 120,并且Math.Abs(G - R) < 40,并且R - B > 80,并且G - B > 80。

6、青色系分布:

G > 180,并且B > 180,并且(B >= G) 或 (G - B) < 10) ,并且B - R > 40,并且G - R > 40。

7、其它颜色:

处理成灰度。

【例 17.40自定义图像处理,保留图像上的单一色系或者多个色系。

       //自定义图像处理private void btnCustom_Click(object sender, EventArgs e){Color pSourceColor;Color pDestColor;Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);for (int i = 0; i < sourceImg.Width; i++){for (int j = 0; j < sourceImg.Height; j++){pSourceColor = sourceImg.GetPixel(i, j);//根据选择情况,保留选定的色系,其它颜色处理成灰度switch( getSingleColor(pSourceColor)){case "R":if (cbR.Checked == true)pDestColor = pSourceColor;elsepDestColor = getAverage(pSourceColor);break;case "G":if (cBG.Checked == true)pDestColor = pSourceColor;elsepDestColor = getAverage(pSourceColor);break;case "B":if (cbB.Checked == true)pDestColor = pSourceColor;elsepDestColor = getAverage(pSourceColor);break;case "P":if (cbP.Checked == true)pDestColor = pSourceColor;elsepDestColor = getAverage(pSourceColor);break;case "Y":if (cbY.Checked == true)pDestColor = pSourceColor;elsepDestColor = getAverage(pSourceColor);break;case "A":if (cbA.Checked == true)pDestColor = pSourceColor;elsepDestColor = getAverage(pSourceColor);break;default:pDestColor = getAverage(pSourceColor);break;}destImg.SetPixel(i, j, pDestColor);}}picDest.Image = destImg;}//计算所属色系,并返回色系缩写字母private string getSingleColor(Color rgb){byte R, G, B;R = rgb.R;G = rgb.G;B = rgb.B;if((R > 128) && (R - G > 30) && (R - B > 30))return "R";if ((G > 80) && (G - R > 5) && ((G - B > 20) | (B - G) < 10))return "G";if ((B > 80) && (B - R > 50) && (B - G > 30))return "B";if ((R > 128) && (B > 128) && (R - G > 30) && (B - G > 30))return "P";if ((R > 140) && (G > 120) && (Math.Abs(G - R) < 40) && (R - B > 80) && (G - B > 80))return "Y";if((G > 180) &&(B > 180) &&((B >= G) | (G - B) < 10) &&(B - R > 40) &&(G - R > 40))return "A";return "N";}//计算灰度均值,返回灰度颜色private Color getAverage(Color rgb){byte R, G, B;byte gray;R = rgb.R;G = rgb.G;B = rgb.B;gray = (byte)((R + G + B) / 3);Color newColor = Color.FromArgb(gray, gray, gray);return newColor;}

运行结果如下图所示:

图17-44 自定义处理

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

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

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

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

相关文章

基于Arduino UNO设计一个温控制系统

目录 概述 1 硬件结构 1.1 整体硬件介绍 1.2 硬件连接结构 2 软件设计 2.1 软件功能介绍 2.2 关于Arduino的一些知识点 2.2.1 定时器 2.2.2 PWM 2.3 代码实现 2.3.1 编译工具 2.3.2 详细代码 3 测试 3.1 温度数据监控 3.2 温控测试 概述 本文介绍如何使用Ardui…

Rust 语言学习杂谈 (end) (各种工作中遇到的疑难杂症)

1.在运行 “cargo build --release” 的时候&#xff0c;到底发生了什么&#xff1f; 源 (GPT4.0) : 当我们运行 cargo build --release 命令时&#xff0c;实际上在进行一系列复杂的步骤来编译和构建 Rust 项目的发布版本。这个过程大致可以分解为以下几个步骤&#xff1a;…

MCU电源控制(PWR)与低功耗

目录 一、STM32 的内核和外设电源系统管理&#xff1a; 二、MCU电源监控&#xff1a; 三、三种低功耗模式&#xff1a; 1、睡眠模式&#xff1a; 2、停止模式&#xff1a; 3、待机模式&#xff1a; 一、STM32 的内核和外设电源系统管理&#xff1a; ① 电池备份区域&#…

关于预训练模型的一点感悟

最近&#xff0c;Yann LeCun 在 WGS 上说&#xff1a; 目前的LLM不可能走到AGI&#xff0c;原因很简单&#xff0c;现在训练这些LLM所使用的数据量为10万亿个令牌&#xff0c;也就是130亿个词&#xff0c;如果你计算人类阅读这些数据需要多长时间&#xff0c;一个人每天阅读8小…

String讲解

文章目录 String类的重要性常用的方法常用的构造方法String类的比较字符串的查找转化数字转化为字符串字符串转数字 字符串替换字符串的不可变性 字符串拆分字符串截取字符串修改 StringBuilder和StringBuffer String类的重要性 在c/c的学习中我们接触到了字符串&#xff0c;但…

MFC提示 未在此计算机上注册ActiveX控件“{648A5600-2C6E-101B-82B6-000000000014}“完美解决

&#x1f482; 个人主页:pp不会算法^ v ^ &#x1f91f; 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 运行一个mfc老项目的时候出现了这个问题 问题原因: 少了一个文件 …

【开源图床】使用Typora+PicGo+Github+CDN搭建个人博客图床

准备工作&#xff1a; 首先电脑得提前完成安装如下&#xff1a; 1. nodejs环境(node ,npm):【安装指南】nodejs下载、安装与配置详细教程 2. Picgo:【安装指南】图床神器之Picgo下载、安装与配置详细教程 3. Typora:【安装指南】markdown神器之Typora下载、安装与无限使用详细教…

【StarryCoding P9】【模板】可撤销并查集(并查集+启发式合并+栈)

描述 给定 n n n个结点&#xff0c; q q q次询问&#xff0c;每次询问分为三类&#xff1a; 1 x y &#xff1a;可以选择将 x , y x, y x,y两个点连通&#xff0c;如果已经连通则不操作。2 &#xff1a;撤销上一次的操作&#xff08;若全部撤销完了则不操作&#xff09;。3 x…

Flex布局简介及微信小程序视图层View详解

目录 一、Flex布局简介 什么是flex布局&#xff1f; flex属性 基本语法和常用属性 Flex 布局技巧 二、视图层View View简介 微信小程序View视图层 WXML 数据绑定 列表渲染 条件渲染 模板 WXSS 样式导入 内联样式 选择器 全局样式与局部样式 WXS 示例 注意事项…

with ThreadPoolExecutor() as executor的使用举例

ThreadPoolExecutor是Python的concurrent.futures模块中的一个类&#xff0c;用于创建一个线程池执行器&#xff0c;可以并发地执行多个任务。 下面是一个使用ThreadPoolExecutor的示例&#xff1a; python from concurrent.futures import ThreadPoolExecutor # 定义一个需…

软件测试概论

第一章、认识软件 一、概述 软件又叫做软体&#xff0c;英文是software 不同的设备上叫法不一样 普通的

【Linux系统化学习】文件重定向

目录 文件内核对象 文件描述符的分配规则 重定向 重定向的概念 dup2系统调用 输出重定向 追加重定向 输入重定向 stderr解析 重定向到同一个文件中 分离常规输出和错输出 文件内核对象 上篇文章中我们介绍到了操作系统中的文件&#xff0c;操作系统为了方…

不同类型的网络拓扑结构在不同的应用场景和需求

不同类型的网络拓扑结构适用于不同的应用场景和需求&#xff0c;下面简要概括几种常见拓扑结构的使用场景及特点&#xff1a; 1、星形 • 使用场景 广泛应用于家庭网络、办公室局域网、企业内部网络以及许多无线网络如Wi-Fi。 • 特点与需求 每个设备通过一条单独的链路连接…

Shellcode免杀对抗(C/C++)

Shellcode C/C免杀&#xff0c;绕过360安全卫士、火绒安全、Defender C/C基于cs/msf的上线 首先是测试一下shellcode上线&#xff0c;主要是俩种方法 测试环境 攻击机&#xff1a;kali2023 靶机&#xff1a;win10 msf方法 首先是启动msf msfconsole 然后msf生成一个sh…

CES 2024:NVIDIA 通过新的笔记本电脑、GPU 和工具提供生成式 AI

在 CES 2024 上&#xff0c;NVIDIA 推出了一系列硬件和软件&#xff0c;旨在释放 Windows 11 PC 上生成式 AI 的全部潜力。 在 PC 上本地运行生成式 AI 对于隐私、延迟和成本敏感型应用程序至关重要。在 CES 上&#xff0c;NVIDIA 将在整个技术堆栈中带来新的创新&#xff0c;…

bat 定时收缩sqlserver2012

在Windows环境下&#xff0c;你可以使用任务计划程序&#xff08;Task Scheduler&#xff09;来定时执行批处理文件&#xff0c;进而收缩SQL Server 2012的数据库。批处理文件&#xff08;.bat&#xff09;将包含执行收缩操作的SQL命令。然而&#xff0c;如前所述&#xff0c;定…

C#开源免费的Windows右键菜单管理工具

前言 今天分享一个C#开源、免费、纯粹的Windows右键菜单管理工具&#xff1a;ContextMenuManager。 工具主要功能 程序支持国际化多语言显示。启用或禁用文件、文件夹、新建、发送到、打开方式、自定义文件格式、IE浏览器、WinX等右键菜单项目。对上述场景右键菜单项目进行修…

MySql查询中按多个字段排序的方法

目录 前言 一、按单个字段排序&#xff1a; 二、按多个字段排序&#xff1a; 二、指定排序方向&#xff1a; 总结 前言 在 SQL 查询中&#xff0c;经常需要按多个字段对结果进行排序。本文将介绍如何使用 SQL 查询语句按多个字段进行排序&#xff0c;提供几种常见的排序方…

【NI-DAQmx入门】数据采集中的降噪技术

1.什么是噪声&#xff1f; 噪声是电路中存在的与期望信号不同的任何电信号 噪声可以降低&#xff0c;但不能消除 噪声可以在源头处被抑制 通过耦合可以降低数据传输通道的噪声 2.噪声耦合方法 导电性 电容性 感应性 其他 3.传导耦合噪声 来自不同电路的电流在一个公共阻抗中共…

⭐北邮复试刷题103. 二叉树的锯齿形层序遍历

103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff1a;输入&#xff1a…