1 rgb转grey,rgb转luv,rgb转lab

1. 1 rgb转grey

 
  1. void RgbToGrey(unsigned char *rgb, double *grey)

  2. {

  3. double R = ((double) rgb[0]) / (double)255.0;

  4. double G = ((double) rgb[1]) / (double)255.0;

  5. double B = ((double) rgb[2]) / (double)255.0;

  6. double y = (double)0.212671 * R + (double)0.715160 * G + (double)0.072169 * B;

  7. if (y > (double)0.008856) grey[0] = (double)116.0 * pow(y, (double)1.0 / (double)3.0) - (double)16.0;

  8. else grey[0] = (double)903.3 * y;

  9. }

1. 2  rgb转luv

 
  1. void RgbToLuv(unsigned char *rgb, double *luv)

  2. {

  3. double L, u, v;

  4. double R = ((double) rgb[0]) / (double)255.0;

  5. double G = ((double) rgb[1]) / (double)255.0;

  6. double B = ((double) rgb[2]) / (double)255.0;

  7. double x = (double)0.412453 * R + (double)0.357580 * G + (double)0.180423 * B;

  8. double y = (double)0.212671 * R + (double)0.715160 * G + (double)0.072169 * B;

  9. double z = (double)0.019334 * R + (double)0.119193 * G + (double)0.950227 * B;

  10. if (y > 0.008856) L = (double)116.0 * pow(y, (double)1.0 / (double)3.0) - (double)16.0;

  11. else L = (double)903.3 * y;

  12. double sum = x + 15 * y + 3 * z;

  13. if(sum != 0) u = 4 * x / sum, v = 9 * y / sum;

  14. else u = 4.0, v = (double)9.0 / (double)15.0;

  15. luv[0] = L;

  16. luv[1] = 13 * L * (u - (double)0.19784977571475);

  17. luv[2] = 13 * L * (v - (double)0.46834507665248);

  18. }

1. 3 rgb转grey

 
  1. void RgbToLab(unsigned char *rgb, double *lab)

  2. {

  3. double R = ((double) rgb[0]) / (double)255.0;

  4. double G = ((double) rgb[1]) / (double)255.0;

  5. double B = ((double) rgb[2]) / (double)255.0;

  6. double X = 0.412453 * R + 0.357580 * G + 0.180423 * B;

  7. double Y = 0.212671 * R + 0.715160 * G + 0.072169 * B;

  8. double Z = 0.019334 * R + 0.119193 * G + 0.950227 * B;

  9. double xr = X / 0.950456, yr = Y / 1.000, zr = Z / 1.088854;

  10. if(yr > 0.008856) lab[0] = 116.0 * pow(yr, 1.0 / 3.0) - 16.0;

  11. else lab[0] = 903.3 * yr;

  12. double fxr, fyr, fzr;

  13. if(xr > 0.008856) fxr = pow(xr, 1.0 / 3.0);

  14. else fxr = 7.787 * xr + 16.0 / 116.0;

  15. if(yr > 0.008856) fyr = pow(yr, 1.0 / 3.0);

  16. else fyr = 7.787 * yr + 16.0 / 116.0;

  17. if(zr > 0.008856) fzr = pow(zr, 1.0 / 3.0);

  18. else fzr = 7.787 * zr + 16.0 / 116.0;

  19. lab[1] = 500.0 * (fxr - fyr);

  20. lab[2] = 200.0 * (fyr - fzr);

  21. }

2 grey转rgb,grey转luv,grey转lab

2.1 grey转rgb

 
  1. void GreyToRgb(double *grey, unsigned char *rgb)

  2. {

  3. if(grey[0] < (double)0.1) rgb[0] = rgb[1] = rgb[2] = 0;

  4. else

  5. {

  6. double y;

  7. if(grey[0] <= (double)7.9996) y = 255 * grey[0] / (double)903.3;

  8. else y = (grey[0] + (double)16.0) / (double)116.0, y = 255 * y * y * y;

  9. rgb[0] = (unsigned char)((y < 0) ? 0 : ((y > 255) ? 255 : y));

  10. rgb[2] = rgb[1] = rgb[0];

  11. }

  12. }

2.2 grey转luv

 
  1. void GreyToLuv(double *grey, double *luv)

  2. {

  3. luv[0] = grey[0], luv[1] = luv[2] = 0;

  4. }

2.3 grey转lab

 
  1. void GreyToLab(double *grey, double *lab)

  2. {

  3. lab[0] = grey[0], lab[1] = lab[2] = 0;

  4. }

3 luv转rgb,luv转grey    

3.1  luv转rgb

 
  1. void LuvToRgb(double *luv, unsigned char *rgb)

  2. {

  3. if(luv[0] < 0.1) rgb[0] = rgb[1] = rgb[2] = 0;

  4. else

  5. {

  6. double x, y, z, u, v;

  7. if(luv[0] <= (double)7.9996) y = luv[0] / (double)903.3;

  8. else y = (luv[0] + (double)16.0) / (double)116.0, y = y * y * y;

  9. u = luv[1] / (13 * luv[0]) + (double)0.19784977571475;

  10. v = luv[2] / (13 * luv[0]) + (double)0.46834507665248;

  11. x = 9 * u * y / (4 * v);

  12. z = (12 - 3 * u - 20 * v) * y / (4 * v);

  13. double R = (double)3.240479 * x - (double)1.537150 * y - (double)0.498535 * z;

  14. double G = (double)-0.969256 * x + (double)1.875992 * y + (double)0.041556 * z;

  15. double B = (double)0.055648 * x - (double)0.204043 * y + (double)1.057311 * z;

  16. R *= 255, G *= 255, B *= 255;

  17. rgb[0] = (unsigned char)((R < 0) ? 0 : ((R > 255) ? 255 : R));

  18. rgb[1] = (unsigned char)((G < 0) ? 0 : ((G > 255) ? 255 : G));

  19. rgb[2] = (unsigned char)((B < 0) ? 0 : ((B > 255) ? 255 : B));

  20. }

  21. }

3.2 luv转grey

 
  1. void LuvToGrey(double *luv, double *grey)

  2. {

  3. grey[0] = luv[0];

  4. }

4  lab转rgb,lab转grey

4.1 lab转rgb

 
  1. void LabToRgb(double *lab, unsigned char *rgb)

  2. {

  3. double X, Y, Z;

  4. double P = (lab[0] + 16.0) / 116.0;

  5. if(lab[0] > 7.9996) Y = 1.000 * P * P * P;

  6. else Y = 1.000 * lab[0] / 903.3;

  7. double yr = Y / 1.000, fy;

  8. if(yr > 0.008856) fy = pow(yr, 1.0 / 3.0);

  9. else fy = 7.787 * yr + 16.0 / 116.0;

  10. double fx = lab[1] / 500.0 + fy, fz = fy - lab[2] / 200.0;

  11. if(fx > 0.2069) X = 0.950456 * fx * fx * fx;

  12. else X = 0.950456 / 7.787 * (fx - 16.0 / 116.0);

  13. if(fz > 0.2069) Z = 1.088854 * fz * fz * fz;

  14. else Z = 1.088854 / 7.787 * (fz - 16.0 / 116.0);

  15. double R = 3.240479 * X - 1.537150 * Y - 0.498535 * Z;

  16. double G = -0.969256 * X + 1.875992 * Y + 0.041556 * Z;

  17. double B = 0.055648 * X - 0.204043 * Y + 1.057311 * Z;

  18. R *= 255, G *= 255, B *= 255;

  19. rgb[0] = (unsigned char)((R < 0) ? 0 : ((R > 255) ? 255 : R));

  20. rgb[1] = (unsigned char)((G < 0) ? 0 : ((G > 255) ? 255 : G));

  21. rgb[2] = (unsigned char)((B < 0) ? 0 : ((B > 255) ? 255 : B));

  22. }

4.2 lab转grey

 
  1. void LabToGrey(double *lab, double *grey)

  2. {

  3. grey[0] = lab[0];

  4. }

5 参考文献

https://blog.csdn.net/google0802/article/details/17633111

[1]http://blog.sina.com.cn/s/blog_5309cefc0101cdeg.html  作者:RescuEe  题目:用c++实现颜色空间rgb,grey,luv和lab的互转

[2]http://blog.sina.com.cn/s/blog_46e3af5b0100u7wt.html  作者:孙志海    题目:RGB与Lab颜色空间转换的程序实现及效果(VC++6.0)

用c++实现颜色空间rgb,grey,luv和lab的互转相关推荐

  1. 2021-01-07 Python Opencv转换颜色空间 RGB转为HSV

    Python Opencv转换颜色空间 RGB转为HSV 举个例子,通过摄像头把视频中的蓝色区域凸显出来,剩余的颜色均为黑色 import numpy as npcap = cv2.VideoCapt ...

  2. python中颜色空间直方图_OpenCV—python 颜色空间(RGB,HSV,Lab)与 颜色直方图

    一.图像分类的过程 image.png 图片必须经过标注 图片的类别为有限的集合,如{猫.狗.牛.马.狼} 每个类别的图片数量接近,如果不同类别图片的数量差异很大,训练出来的分类器容易倾向于图片数量多 ...

  3. LUV色彩空间介绍及从RGB到LUV的转换

    CIE 1931 XYZ 色彩空间(也叫做 CIE 1931 色彩空间)是其中一个最先采用数学方式来定义的色彩空间,它由国际照明委员会(CIE)于1931年创立.人类眼睛有对于短(S).中(M)和长( ...

  4. 【颜色空间】RGB、HSV、Lab、YUV颜色空间模型

      颜色通常用三个相对独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间.而颜色可以由不同的角度,用三个一组的不同属性加以描述,就产生了不同的颜色空间.但被描述的颜色对象本 ...

  5. OpenCV—python 颜色空间(RGB,HSV,Lab)与 颜色直方图

    文章目录 一.图像分类的过程 二.开发环境:(安装)OpenCV 计算机视觉库 三.颜色空间(颜色模型:RGB,HSV,Lab) 3.1 opencv--HSV颜色空间 四.OpenCV处理图片 4. ...

  6. 机器学习图像特征提取—颜色(RGB、HSV、Lab)特征提取并绘制直方图

    目录 1 颜色特征 1.1 RGB色彩空间 1.2 HSV色彩空间 1.3 Lab色彩空间 2 使用opencv-python对图像颜色特征提取并绘制直方图 2.1 RGB颜色特征和直方图 2.2 H ...

  7. matlab hsi颜色空间,RGB与HSI颜色空间互换函数(matlab)

    近看了一本数字图像处理的原版书.其中提供了RGB与HSI颜色空间之间的相互转变函数.已在matlab7.0中测试成功.不敢独享,贴出来供大家参考. function hsi=rgb2hsi(rgb) ...

  8. 颜色空间RGB与HSV HSL 的转换

    一般的3D编程只需要使用RGB颜色空间就好了,但其实美术人员更多的是使用HSV(HSL),因为可以方便的调整饱和度和亮度. 有时候美术需要程序帮助调整饱和度来达到特定风格的渲染效果,这时候就需要转换颜 ...

  9. RGB、HSV和Lab颜色空间

    https://blog.csdn.net/fred_yang2013/article/details/11083691 http://blog.csdn.net/carson2005/article ...

最新文章

  1. NC:南农团队解码并重构微生物群体感应系统
  2. 利用svn自动同步更新到网站服务器 -- 网摘
  3. 电商平台 高并发 微服务 方案_Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战...
  4. 书呆子rico_寻找设计和类型书呆子的清道夫
  5. 强上阿里云之安装MYSQL
  6. 解决sql脚本文件太大无法打开的问题
  7. 最初级且依赖于硬件的计算机语言是,计算机基础复习大纲(整理版).doc
  8. 准确检测图像的轮廓 opencv_OpenCV图像处理-轮廓和轮廓特征
  9. 元胞自动机(又称细胞自动机)
  10. 乒乓球比赛赛程_乒乓球赛程_如何组织一场乒乓球赛
  11. wegame服务器选择不显示,wegame辅助功能不显示怎么解决
  12. 【转贴】龙芯生态产品和解决方案巡展(第二篇)——笔记本电脑
  13. java汉字转拼音和获取汉语拼音首字母
  14. MySQL 1054错误 Unknown column .... in 'on clause'
  15. PR2019打开报错:由于找不到MSVCR110.dll,无法继续执行代码
  16. 【idea 2021.2】如何将idea中的代码推到git仓库中(最新详细版)
  17. 向U盘传输文件时,出现对于目标文件系统,文件* * * * * * * 过大
  18. 【新员工座位安排系统】
  19. springboot uniapp图书借阅管理系统源码
  20. 联想——所有浏览器被篡改成“联想酷生活”

热门文章

  1. python初中文化好学吗_工作三年却被实习生抢了饭碗,学会Python到底有多吃香?...
  2. java打印各种三角形~(**版)
  3. List和数组 互相转换 - Java
  4. 分页功能的分析与实现
  5. 金蝶显示云服务器离线,金蝶kis显示云服务器已离线
  6. 一政网是真实助公考上岸的吗?
  7. C++ windows下自动递归创建所有目录
  8. 微信小程序设置页面背景颜色backgroundColor 无效的问题!
  9. 《圣经》中最让人感动的十句
  10. 华为ensp.访问控制列表(ACL):关于基本ACL和高级ACL————访问的代码基础讲解(允许或禁止访问)