HSV色彩空间

转自原文 HSV色彩空间

 


理解HSV色彩空间:


     HSV颜色模式是除了RGB颜色模式之外的另一种流行的颜色模式,RGB被广泛运用于计算机中,而HSV则用在电视显示方面。它更符合人们对颜色的描述(什么颜色(H),深浅度如何(S),亮度如何(V))。其实在电视机上菜单中的饱和度就是S,亮度就是V。
H:色相,色度,色彩,也就是我们平时说的颜色。如红,黄,洋红等。在HSV模型中,用度数描述,其中红色对于0度,绿色对于120度,蓝色对应240度。
S:饱和度,色彩的深浅度(0-100%) 
V:色调,纯度,色彩的亮度(0-100%) 

为了便于理解,下文均称H为色彩,S为深浅度,V为亮度。关于色相,色调,饱和度等概念的更深入解释可参见《Visual C++数字图像处理开发入门与编程实践》左飞著 第三章

HSV色彩空间模型:
     
模型1                                    模型2
注:在模型2中:
H是色彩点在对应圆形切面上与红色半径(对于H=0度)所形成的圆心角。
V是色彩点所在圆形切面到圆锥顶点的距离。在顶面上V=1 顶点V=0
S是色彩点到所在圆形切面圆心的距离与该圆半径的比例值,在圆锥表面上S=1,在圆心处S=0

关键点:
当S=1 V=1时,H所代表的任何颜色被称为纯色;
当S=0时,颜色最浅,最浅被描述为灰色(灰色也有亮度,黑色和白色也属于灰色),灰色的亮度由V决定,此时H无意义;
当V=0时,颜色最暗,最暗被描述为黑色,因此此时H(无论什么颜色最暗都为黑色)和S(无论什么深浅的颜色最暗都为黑色)均无意义。
下面是当H=0度 即为红色时,S和V组成的平面:
在这张图中,S沿横轴从左到右0-1增长 V沿纵轴由下到上0-1增长
可以看到,当S=0,即矩形左边的竖线边缘处,呈不同深浅的灰色
当V=0,即矩形下班的横线边缘处,呈黑色
当S=0   V=1时,此时颜色最亮,但也最浅。也就是矩形的左上角,呈白色。
当S=1(S=0) V=0时,颜色最深(最浅),但最暗,均体现为黑色
当S=1 V=1时,在矩形的右上角,就是纯色的红色,也就是我们常用的RGB(255, 0, 0)

HSV和RGB的关系:


在HSV中:
1.亮度V就是RGB值中最大的那个值进行归一化。也就是说 V = max(R, G, B)/255.0f;
从这一点我们可以推出:
1.纯色(S=1 V=1)的RGB值中必定至少有一个255,因为纯色V=1,即max(R, G, B)=255。同时RGB值也不可能有3个255,因为3个255为白色,前面我们提到,白色为对于任何色彩H,V=1而S=0时的产物。而V=1 S=0并不是纯色。
2.这个公式也侧面说明了当V=0时,max(R, G, B)=0,也就是R=G=B=0,即为黑色。
2.深浅度S是RGB中最大值和最小值的差值与最大值的比值。设RGBMax=max(R,G,B) RGBMin=min(R,G,B) 那么S = (RGBMax-RGBMin)/(float)RGBMax    
从这个公式我们可以推导:
1.纯色(S=1 V=1)的RGB值中必定有一个0,因为当S=1,RGBMax-RGBMin==RGBMax,即RGBMin=0。这也说明了白色(RGB(255,255,255)并不是纯色)。
2.当S=0时,RGBMax-RGBMin==0,即R==G==B,此时颜色呈不同程度的灰色(由白到黑,亮度由V而定,因为V=RGBMax*100/255,V越高,RGBMax==R==G==B就越高,灰色越亮))。这也可以从上面给出的矩形图看出。

3.色彩H的对应RGB值也可以出来了,纯色的范围为:RGB(255,0,×), RGB(255,×,0),RGB(0,255,×),RGB(×,255,0,RGB(×,0,255),RGB(0,×,255)。×代表(0,255)中的任意值。这六大部分组成一个圈形色带。具体转换见下节。

再结合上面的矩形图分析一下;
1.对于上面矩形中每一条横线(H和V不变,S从左到右0-1),如果用颜色拾取器(如最后一节提供的示例ColorPicker)观察,可以发现,从右到左,在同一纵坐标上,RGB的变化是从RGB(r,g,b)到RGB(max(r,g,b),max(r,g,b),max(r,g,b))逐渐逼近。最终在最左边的点呈灰色(R=G=B),灰色的亮度由max(r,g,b)决定。
2.对于矩形中每一条竖线(H和S不变,V从下到上0-1),从上到下,RGB值的变化由RGB(r,g,b)逐渐趋近于RGB(0,0,0),最终变为黑色。这也为我们绘制如上的SV调色板提供了思路。

HSV和RGB之间的转换:

   
RGB->HSV:
S = ((max-min)/max)*100/255

V = max*100/255

HSV->RGB:


一个简单实例:

     
参考《Visual C++数字图像处理开发入门与编程实践》左飞著 第三章实例 ColorPicker
界面:
功能:
可进行HSV和RGB的转换
左方调色板可对任意RGB颜色或H值进行S和V值的渐变调色
中下方的预览框会对选取颜色进行实时显示
可通过点击调色板某处进行颜色选取
可在屏幕任意位置按A键捕获当前鼠标所在位置的颜色信息并实时显示颜色信息

实例代码免费下载(VS 2012 Build Passed. 2017.6.14 1354):ColorPicker.rar

转载于:https://www.cnblogs.com/arxive/p/7008460.html

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

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

相关文章

Linux之tomcat日志管理

tomcat 的日志输出catalina.out,变大,可使用下面方式解决。 cronolog. http://blog.csdn.net/huang_xw/article/details/6194232转载于:https://www.cnblogs.com/itdev/p/6103207.html

java随机抽题系统_为什么要使用考试系统的随机组卷功能?

一个考试系统的组卷灵活性,不仅仅在于其题型丰富、设置参数齐全,也在于抽题组卷方式。除了平时我们严肃性的固定题目出卷方式,我们往往也考虑到需要随机组卷的功能。为什么用户会需要随机组卷的功能呢?随机组卷功能有什么用处&…

vue 项目中 splice 删除的不是指定的位置 而是最后一个

问题 就是v-for选择里面 删除数组指定元素 结果splice删除的永远都是最后一个 //html <view class"card ml20 mr20 mt20 c-row"><view class"flex-cover time-main" v-for"(item,index) in tabbar" :key"index"><scr…

常用的git命令

GIT 什么是git 是一个源代码管理工具在一个项目中&#xff0c;凡是由开发人员编写的都是源代码源代码有必要被管理起来吗让源代码可以被追溯&#xff0c;主要记录每次变了什么&#xff0c;谁主导这次变化人为的维护比较麻烦GIT是Linux之父当年为了维护管理Linux源代码写的一个工…

frameset在html5下用什么代替_速速围观!冬至吃货地图来啦~蚌埠的吃货们,你们今天吃什么?...

中国传统二十四节日冬农历十一月初七至冬至&#xff0c;又称日短至、冬节、亚岁等&#xff0c;兼具自然与人文两大内涵&#xff0c;既是二十四节气中一个重要的节气&#xff0c;也是中国民间的传统节日&#xff0c;被视为冬季的大节日。我们迎来了冬至节气&#xff0c;真正的隆…

WinForm(九)UI加载“大”数据

由于WinForm的UI是绘制的&#xff0c;所以在加载大量数据数据时会有一定的延时&#xff0c;本篇就讨论几个减少延时的方法。在加载有规律数据时&#xff0c;可以考虑用递归&#xff0c;简单方便快捷来加载数据&#xff0c;如下&#xff0c;把一个文件夹下的所有文件或文件夹加载…

QuillEditor 图片添加缩放功能

安装插件 npm install --save quill-blot-formatter 使用&#xff1a; 添加 :modules"modules" <template><QuillEditorref"refEditor"theme"snow":toolbar"toolbarOptions"contentType"html"enable:content…

关于电商购物车与订单

选好一个商品&#xff0c;点击加入购物车的时候&#xff0c;你要把商品的id和用户的id放入购物车表里面&#xff0c;如果还有其他重要的标志性信息也可以放进去&#xff0c;这样用户就是退出商城&#xff0c;下次进入的时候&#xff0c;系统加载也可以去检索购物车表信息&#…

Servlet 应用程序事件、监听器

Web容器管理Servlet/JSP相关的生命周期&#xff0c;若对HttpServletRequest对象、HttpSession对象、ServletContxt对象在生成、销毁或相关属性设置发生的时机点有兴趣&#xff0c;可以实现对应的监听器(Listener)。 一、ServletContext事件、监听器 与ServletContext相关的监听…

BZOJ4596:[SHOI2016]黑暗前的幻想乡——题解

https://www.lydsy.com/JudgeOnline/problem.php?id4596 https://www.luogu.org/problemnew/show/P4336#sub 四年一度的幻想乡大选开始了&#xff0c;最近幻想乡最大的问题是很多来历不明的妖怪涌入了幻想乡&#xff0c;扰乱了幻想乡昔日的秩序。但是幻想乡的建制派妖怪&#…

巴川数据科学炼成记_智橡树智能英语好不好有哪些功能?提出的科学学习思想是什么?...

智橡树智能英语与真人老师英语教学的最大区别就是解决老师课堂上不擅长、学生课后难坚持的单词、听力、口语、阅读重复训练问题&#xff0c;是辅助老师课堂教学的最佳搭档&#xff01;智橡树智能英语基于人工智能及大数据技术&#xff0c;专注音标、单词、听力、阅读、语法、口…

.NET 调整图片尺寸(Resize)各种方法

前言调整图片尺寸最常用的场景就是生成缩略图&#xff0c;一般为保持纵横比缩小&#xff0c;如果图片放大会使图片变得模糊&#xff0c;如果确实有这方面的需求&#xff0c;可以寻找开源的AI放大图片的方法。1.ImageSharp开源地址&#xff1a;https://github.com/SixLabors/Ima…

vite解决警告: You are running the esm-bundler build of vue-i18n. It is recomme

(转载请删除括号里的内容) 解决方法&#xff1a;在vite.config.js加入以下代码 resolve: { alias: {vue-i18n: vue-i18n/dist/vue-i18n.cjs.js} }--------------------- 作者&#xff1a;BY_BC 来源&#xff1a;CSDN 原文&#xff1a;https://blog.csdn.net/BY_BC/article…

MongoDB 设置权限认证

1、以未添加auth 的方式启动 mongoDb /mongodb/bin/mongod --dbpath /mongodb/data/db 2、添加用户 /mongodb/bin/mongo a、管理员账户用户名 use admin db.addUser(admin,admin) b、annaDb(其他数据库)账户用户名 use annaDb db.addUser(xxx,xxx) c、新版本添加用户方法 db.cr…

设计师要懂布局(一)

2019独角兽企业重金招聘Python工程师标准>>> 页面版式的好坏给了用户第一印象&#xff0c;好不好用&#xff0c;想不想看页面的内容&#xff0c;要不要收藏这个页面&#xff0c;在设计中都起到了决定性作用。 在互联网时代&#xff0c;我们接触最多的就是手机和电脑…

ES6入门之Symbol

ES5对象属性名都是字符串容易造成属性名的冲突。 eg:var a { name: lucy};a.name lili;这样就会重写属性 ES6引入了一种新的原始数据类型Symbol&#xff0c;表示独一无二的值。 重新复习下新知识&#xff1a;基本数据类型有6种&#xff1a;Undefined、Null、布尔值&#xff0…

mac safari无法连接服务器_宇航员乘坐SpaceX飞船返航中iPad上Safari出现“无法连接到网络”错误...

罗伯特贝恩肯(Robert Behnken)和道格拉斯赫尔利(Douglas Hurley)在完成轨道实验室任务后&#xff0c;于今天搭乘 SpaceX 公司的"Crew Dragon"飞船离开国际空间站&#xff0c;为他们历史性的国际空间站飞行画上句号。两名宇航员在位于美国德克萨斯州休斯顿和加利福尼亚…

Vue 大量数据展示卡顿解决方案(长列表优化)

需求分析&#xff08;长列表展示&#xff09; 页面某处需要渲染 1w 条数据&#xff0c;并需要滚动展示&#xff0c;这时如果直接把这些数据渲染到页面上&#xff0c;会导致系统内存大量被占用&#xff0c;导致页面卡顿或崩溃 我们都知道&#xff0c;每次 DOM 修改&#xff0c;浏…

Blazor University (47)依赖注入 —— Singleton 依赖

原文链接&#xff1a;https://blazor-university.com/dependency-injection/dependency-lifetimes-and-scopes/singleton-dependencies/Singleton 依赖Singleton 依赖是一个由依赖它的每个对象共享的单个对象实例。在 WebAssembly 应用程序中&#xff0c;这是在浏览器的当前选项…

nginx log_format详解

nginx服务器日志相关指令主要有两条&#xff0c;一条是log_format&#xff0c;用来设置日志格式&#xff0c;另外一条是access_log&#xff0c;用来指定日志文件的存放路径、格式和缓存大小&#xff0c;一般在nginx的配置文件中日记配置(/usr/local/nginx/conf/nginx.conf)。 n…