写在前面

HSV是一种将RGB色彩空间中的点在倒圆锥体中的表示方法。HSV即色相(Hue)、饱和度(Saturation)、明度(Value),又称HSB(B即Brightness)。色相是色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等。饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。明度(V),取0-max(计算机中HSV取值范围和存储的长度有关)。HSV颜色空间可以用一个圆锥空间模型来描述。圆锥的顶点处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处V=max,S=0,H无定义,代表白色。

RGB颜色空间中,三种颜色分量的取值与所生成的颜色之间的联系并不直观。而HSV颜色空间,更类似于人类感觉颜色的方式,封装了关于颜色的信息:“这是什么颜色?深浅如何?明暗如何?”

HSV模型:

这个模型就是按色彩、深浅、明暗来描述的。

H是色彩;

S是深浅, S = 0时,只有灰度;

V是明暗,表示色彩的明亮程度,但与光强无直接联系。

应用:同HSI一样,可以用于偏光矫正、去除阴影、图像分割等。

RGB与HSV转换

1、RGB2HSV

2、HSV2RGB

实现

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace cv;Mat RGB2HSV(Mat src) {int row = src.rows;int col = src.cols;Mat dst(row, col, CV_32FC3);for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {float b = src.at<Vec3b>(i, j)[0] / 255.0;float g = src.at<Vec3b>(i, j)[1] / 255.0;float r = src.at<Vec3b>(i, j)[2] / 255.0;float minn = min(r, min(g, b));float maxx = max(r, max(g, b));dst.at<Vec3f>(i, j)[2] = maxx; //Vfloat delta = maxx - minn;float h, s;if (maxx != 0) {s = delta / maxx;}else {s = 0;}if (r == maxx) {h = (g - b) / delta;}else if (g == maxx) {h = 2 + (b - r) / delta;}else if (b==maxx) {h = 4 + (r - g) / delta;}else{h = 0;}h *= 60;if (h < 0)h +=  360;dst.at<Vec3f>(i, j)[0] = h;dst.at<Vec3f>(i, j)[1] = s;}}return dst;
}Mat HSV2RGB(Mat src) {int row = src.rows;int col = src.cols;Mat dst(row, col, CV_8UC3);float r, g, b, h, s, v;for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {h = src.at<Vec3f>(i, j)[0];s = src.at<Vec3f>(i, j)[1];v = src.at<Vec3f>(i, j)[2];if (s == 0) {r = g = b = v;}else {h /= 60;int offset = floor(h);float f = h - offset;float p = v * (1 - s);float q = v * (1 - s * f);float t = v * (1 - s * (1 - f));switch (offset){case 0: r = v; g = t; b = p; break;case 1: r = q; g = v; b = p; break;case 2: r = p; g = v; b = t; break;case 3: r = p; g = q; b = v; break;case 4: r = t; g = p; b = v; break;case 5: r = v; g = p; b = q; break;default:break;}}dst.at<Vec3b>(i, j)[0] = int(b * 255);dst.at<Vec3b>(i, j)[1] = int(g * 255);dst.at<Vec3b>(i, j)[2] = int(r * 255);}}return dst;
}int main(){cv::Mat src = cv::imread("I:\\Learning-and-Practice\\2019Change\\Image process algorithm\\Img\\lena.JPG");if (src.empty()){return -1;}cv::Mat dst, dst1, dst2;opencv自带/cv::cvtColor(src, dst1, CV_RGB2HSV); //RGB2HSV//RGB2HSV//dst = RGB2HSV(src); //RGB2HSVdst2 = HSV2RGB(dst); //HSV2BGRcv::namedWindow("src", CV_WINDOW_NORMAL);imshow("src", src);cv::namedWindow("My_RGB2HSV", CV_WINDOW_NORMAL);imshow("My_RGB2HSV", dst);cv::namedWindow("My_HSV2RGB", CV_WINDOW_NORMAL);imshow("My_HSV2RGB", dst2);cv::namedWindow("Opencv_RGB2HSV", CV_WINDOW_NORMAL);imshow("Opencv_RGB2HSV", dst1);cv::waitKey(0);return 0;}

效果

参考:

https://blog.csdn.net/viewcode/article/details/8203728

https://blog.csdn.net/just_sort/article/details/87102898

https://blog.csdn.net/jiangxinyu/article/details/8000999

色彩转换系列之RGB格式与HSV格式互转原理及实现相关推荐

  1. python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化

    python使用openCV加载图像.并将BGR格式转换成HSV格式.定义HSV格式中需要分离颜色的掩码(掩模)区间(mask).并使用mask信息进行颜色分离.将BGR格式的图像转化为RGB.可视化 ...

  2. 在Python中使用OpenCV将RGB格式的图像转换为HSV格式的图像

    An HSV is another type of color space in which H stands for Hue, S stands for Saturation and V stand ...

  3. TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式

    TF之VGG系列:利用预先编制好的脚本data_convert .py文件将图片格式转换为tfrecord 格式 目录 转换代码 转换后的结果 转换代码 python data_convert2tfr ...

  4. 【秃头系列】-【本科生毕设论文格式Word】自动生成论文多级标题并排版正文

    文章目录 01 - 论文多级标题及正文 1.1 - 多级标题 1.2 - 正文 02 - 如何自动生成 2.1 - 格式约定 2.2 - 设置多级标题 2.2.1 - 设置标题样式 2.2.2 - 设 ...

  5. 【秃头系列】-【本科生毕设论文格式Word】自动生成目录并调整目录

    文章目录 01 - 论文目录 02 - 如何自动生成 03 - 调整目录 04 - 使用效果 05 - 总结   上一文:[秃头系列]-[本科生毕设论文格式Word]自动生成论文多级标题并排版正文   ...

  6. 【秃头系列】-【本科生毕设论文格式Word】自动生成页面布局

    文章目录 01 - 页面布局 02 - 如何自动生成 2.1 - 格式约定 2.1 - 设置页边距 2.2 - 设置页眉 2.3 - 设置页脚 2.3 - 善后操作 03 - 操作GIF 3.1 - ...

  7. 【秃头系列】-【本科生毕设论文格式Word】小修改和小问题

    文章目录 01 - 小修改 1.1 - 修改正文字体和字号 1.2 - 修改正文行距 1.3 - 修改标题字体和字号 02 - 小问题 2.1 - 当发现首行没有缩进2字符 2.2 - 当发现有些删不 ...

  8. 信创办公--基于WPS的Word最佳实践系列(快速统一文档格式)

    信创办公–基于WPS的Word最佳实践系列(快速统一文档格式) 项目背景 在一篇长文档中,会存在标题和正文的部分,而作为标题,就应该具有和正文有所区分的特殊格式.如果要一个一个标题进行设置,里面的重复 ...

  9. 【秃头系列】-【本科生毕设论文格式Word】自动生成图表公式题注并交叉引用

    文章目录 01 - 论文的图.表.公式和题注 02 - 如何自动生成 2.1 - 格式约定 2.2 - 设置图的题注 2.3 - 设置表的题注 2.4 - 设置公式的题注 03 - 题注的交叉引用 3 ...

最新文章

  1. 把二元查找树转变成排序的双向链表
  2. conda init 关闭和重启shell_Linux的/etc/init.d详解
  3. 推荐算法炼丹笔记:阿里序列化推荐算法MRIF
  4. 中如何将方形图片转换成圆形图片_【PS】PS中不可不知的实用技巧!你都掌握了吗?...
  5. Thrift初用小结
  6. java eight,Java语法基础学习DayEight
  7. java读取照片信息 获取照片拍摄时的经纬度
  8. 重拾React: React 16.0
  9. python表格控件_tkinter 控件 Treeview 表格数据
  10. dubbo 异步回调
  11. OpenCV(VS2019)——无法打开“opencv2/opencv.hpp”文件
  12. UE4 虚幻引擎,3D数学(一),3D坐标系,2D坐标系
  13. python的空语句_Python 函数返回空值
  14. 以太坊实战之《如何正确处理nonce》
  15. 谁与争锋,JDK动态代理大战CGLib动态代理
  16. HEVC-环路滤波 之去块效应滤波
  17. 读博士需要什么品质和能力?到底什么样的人适合读博士?
  18. JavaEE之Servlet/Jsp初识
  19. Memcached/Redis可视化客户端TreeNMS使用
  20. 途牛2019移动端招聘

热门文章

  1. 检验身份证的正确性(C语言版本)
  2. git通过token登录
  3. Python uniform() 函数
  4. 机器学习模型评估与改进:网格化调参(grid search)
  5. 逆变器阻抗扫描 扫频法 阻抗扫描 阻抗建模验证
  6. 浏览器打不开某些网站是什么原因导致,试试用这些方法来解决
  7. 谈一谈Java中的“静态”
  8. 数字藏品交易平台开发 数字藏品交易网站开发
  9. 制作网站价格是多少呢?制作网站要花多少钱?
  10. VC++6.0 用gSoap客户端访问WebService