对于Lab颜色空间,OpenCV同样实现了BGR和Lab之间的转换,如果BGR的值在[0,1]之间,那么转换为Lab的取值范围为:

通过以下程序调节L分量,观察其效果:

#include<opencv2/core.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/highgui.hpp>
using namespace cv;
#include<string>
using namespace std;
//显示Lab颜色的色卡
Mat colorMap;
//L的取值范围 [0,100]
int L = 50;
int MAX_L = 100;
//a的取值范围[-127,128]
int MAX_a = 255;
//b的取值范围[-127,128]
int MAX_b = 255;
//颜色显示窗口
string showColor = "Lab";
//回调函数
void callback(int, void*);
int main(int argc, char*argv[])
{//分配内存colorMap.create(Size(MAX_a, MAX_b), CV_32FC3);//命名窗口namedWindow(showColor, WINDOW_GUI_EXPANDED);//调节 L 分量createTrackbar("L分量", showColor, &L, MAX_L, callback);callback(0, 0);waitKey(0);return 0;
}
void callback(int, void*)
{//MAX_a x MAX_b种颜色for (int a = 0; a < MAX_a; a++){for (int b = 0; b < MAX_b; b++){colorMap.at<Vec3f>(a, b) = Vec3f(L, a - 127, b - 127);}}//颜色空间转换cvtColor(colorMap, colorMap, COLOR_Lab2BGR);//显示颜色空间imshow(showColor, colorMap);
}

显示结果如下:

   

如果输入的RGB时CV_8U,那么转换的Lab也是CV_8U,值的范围是:

#include<opencv2/core.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/highgui.hpp>
using namespace cv;
#include<string>
using namespace std;
//显示颜色
Mat colorMap;
//L的取值范围 [0,100]
int L = 0;
int MAX_L = 100;
//a的取值范围[-127,128]
int a = 0;
int MAX_a = 255;
//b的取值范围[-127,128]
int b = 0;
int MAX_b = 255;
//颜色显示窗口
string showColor = "Lab";
//回调函数
void callback(int, void*);
int main(int argc, char*argv[])
{//分配内存colorMap.create(Size(500, 500), CV_32FC3);//命名窗口namedWindow(showColor, WINDOW_GUI_EXPANDED);//调节 L 分量createTrackbar("L分量", showColor, &L, MAX_L, callback);//调节 a 分量createTrackbar("a分量", showColor, &a, MAX_a, callback);//调节 b 分量createTrackbar("b分量", showColor, &b, MAX_b, callback);callback(0, 0);waitKey(0);return 0;
}
void callback(int, void*)
{//Lab颜色colorMap.setTo(Vec3f(L, a-127, b-127));//颜色空间转换cvtColor(colorMap, colorMap, COLOR_Lab2BGR);//显示颜色空间imshow(showColor, colorMap);
}

运行结果如下:

  

可以通过调节这三个分量观察颜色的变换。

---------------------------------------------------------------------------------------------------------------------

把CV_8UC3的BGR图像(不进行归一化处理),Lab的取值范围也会被归到【0,255】,分别显示三个通道的图像:

#include<opencv2/core.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
using namespace cv;
#include<iostream>
using namespace std;
int main(int argc, char*argv[])
{//输入图像Mat img = imread(argv[1],IMREAD_ANYCOLOR);if (!img.data || img.channels() != 3)return -1;//输入图像的归一化//img.convertTo(img, CV_32FC3, 1.0 / 255, 0);cout << img.depth() << endl;/*--------BGR 转 Lab--------------*/Mat lab;cvtColor(img, lab, COLOR_BGR2Lab);cout << lab.depth() << endl;vector<Mat> labPlane;/*-------分离Lab的三个通道---------*/split(lab, labPlane);//显示各个通道imshow("Lab-L", labPlane[0]);imshow("Lab_a", labPlane[1]);imshow("Lab-b", labPlane[2]);waitKey(0);return 0;
}

OpenCV颜色空间——Lab颜色空间相关推荐

  1. 【OpenCV】Lab颜色空间

    一.Lab颜色空间概念 Lab是一种色彩空间,也即一种颜色模型,是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立的,在1976年又经修订并被命名为CIELab.它包括人眼所能看 ...

  2. Python实现RGB和Lab颜色空间互转

    Python实现RGB和Lab颜色空间互转 https://github.com/rubund/debian-home-assistant/blob/1a3e8f7e4b9ddec60a4380e14 ...

  3. LAB颜色空间各通道的取值范围

    同RGB颜色空间相比,Lab是一种不常用的色彩空间.它是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立起来的.1976年,经修改后被正式命名为CIELab.它是一种设备无关的颜 ...

  4. OpenCV基础(7)OpenCV中的颜色空间

    在本教程中,我们将学习计算机视觉中常用的颜色空间,并使用它进行基于颜色的分割.我们还将共享c++和Python的演示代码. 我们在许多计算机视觉应用中都遇到了这个问题,包括肤色检测.交通灯识别等基于颜 ...

  5. Python实现RGB转Lab颜色空间,PS:和PhotoShop转换结果一样

    由于工作要求,需要把rgb颜色转成Lab颜色空间.网上一搜一大把的代码,但是和PS一对比,基本上都不对. 下面这张图是OpenCV官方文档的计算方法. 用Python实现代码如下: from math ...

  6. MATLAB 将RGB颜色空间转为HSI颜色空间、LAB颜色空间 原理及程序

    一张彩色图像是由R.G.B三个通道组成,所以首先需要将彩色图像分为三个通道的图像. 以下是对猫图进行单通道提取得到的图像. HSI颜色空间 HSI[Hue-Saturation-Intensity(L ...

  7. RGB、HSV和Lab颜色空间

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

  8. Lab颜色空间及其应用

    Lab颜色空间及其应用 from: http://nkwavelet.blog.163.com/blog/static/227756038201441624345947/ 本文首先阐述Lab颜色模式的 ...

  9. 基于LAB颜色空间的彩色图像分割

    基于LAB颜色空间的彩色图像分割 首先加载原始图像 fabric = imread('fabric.png'); figure(1), imshow(fabric), title('fabric'); ...

最新文章

  1. uboot学习之BL3的流程
  2. python3库下载_下载安装Python第三方库的方法,最全方式,值得收藏
  3. 多久没有给家里打过电话了?
  4. 前端解读面向切面编程(AOP)
  5. 如何在Chrome浏览器中创建账户?
  6. 图解算法系列笔记(三)
  7. php 写入套节字,php – 写入套接字并处理损坏的管道
  8. RxJava 和 RxAndroid 四(RxBinding的使用)
  9. [游戏] - 游戏教程
  10. MongoDB Shell工具:mongosh的使用
  11. 拼音搜索 拼音首字母搜索 (pinyin-match) js
  12. editormd 上传图片问题解决
  13. 基于OAI协议元数据收割的.NET资源
  14. 组装一台计算机的配置,要不要自己动手组装一台电脑?一文告诉你答案!
  15. 第1章 微处理器、微型计算机、微型计算机系统的区别
  16. Java之~~包(package)
  17. ThinkPad E40 XP 安装SATA/AHCI驱动
  18. 当年轻人开始拼命戒抖音
  19. 基于 FFMPEG 的像素格式变换(swscale,致敬雷霄骅)
  20. Java新手上路--算数运算符

热门文章

  1. 欠缺的_习惯累积沉淀_新浪博客
  2. 狗年拜年php源码,创意拜年祝福语狗年
  3. RN (React Native)相对原生有哪些优势?
  4. RSA结合DES解决上下行接口的安全性问题
  5. 2022杭电多校4 G - Climb Stairs
  6. Python语言的动态性:运行时动态绑定,删除属性和方法
  7. http client的英文文档 牛逼
  8. 手持式激光测距仪全套方案
  9. SAP 物料标准价和移动平均价详解
  10. 无人值守安装操作系统