OpenCV颜色空间——Lab颜色空间
对于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颜色空间相关推荐
- 【OpenCV】Lab颜色空间
一.Lab颜色空间概念 Lab是一种色彩空间,也即一种颜色模型,是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立的,在1976年又经修订并被命名为CIELab.它包括人眼所能看 ...
- Python实现RGB和Lab颜色空间互转
Python实现RGB和Lab颜色空间互转 https://github.com/rubund/debian-home-assistant/blob/1a3e8f7e4b9ddec60a4380e14 ...
- LAB颜色空间各通道的取值范围
同RGB颜色空间相比,Lab是一种不常用的色彩空间.它是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立起来的.1976年,经修改后被正式命名为CIELab.它是一种设备无关的颜 ...
- OpenCV基础(7)OpenCV中的颜色空间
在本教程中,我们将学习计算机视觉中常用的颜色空间,并使用它进行基于颜色的分割.我们还将共享c++和Python的演示代码. 我们在许多计算机视觉应用中都遇到了这个问题,包括肤色检测.交通灯识别等基于颜 ...
- Python实现RGB转Lab颜色空间,PS:和PhotoShop转换结果一样
由于工作要求,需要把rgb颜色转成Lab颜色空间.网上一搜一大把的代码,但是和PS一对比,基本上都不对. 下面这张图是OpenCV官方文档的计算方法. 用Python实现代码如下: from math ...
- MATLAB 将RGB颜色空间转为HSI颜色空间、LAB颜色空间 原理及程序
一张彩色图像是由R.G.B三个通道组成,所以首先需要将彩色图像分为三个通道的图像. 以下是对猫图进行单通道提取得到的图像. HSI颜色空间 HSI[Hue-Saturation-Intensity(L ...
- RGB、HSV和Lab颜色空间
https://blog.csdn.net/fred_yang2013/article/details/11083691 http://blog.csdn.net/carson2005/article ...
- Lab颜色空间及其应用
Lab颜色空间及其应用 from: http://nkwavelet.blog.163.com/blog/static/227756038201441624345947/ 本文首先阐述Lab颜色模式的 ...
- 基于LAB颜色空间的彩色图像分割
基于LAB颜色空间的彩色图像分割 首先加载原始图像 fabric = imread('fabric.png'); figure(1), imshow(fabric), title('fabric'); ...
最新文章
- uboot学习之BL3的流程
- python3库下载_下载安装Python第三方库的方法,最全方式,值得收藏
- 多久没有给家里打过电话了?
- 前端解读面向切面编程(AOP)
- 如何在Chrome浏览器中创建账户?
- 图解算法系列笔记(三)
- php 写入套节字,php – 写入套接字并处理损坏的管道
- RxJava 和 RxAndroid 四(RxBinding的使用)
- [游戏] - 游戏教程
- MongoDB Shell工具:mongosh的使用
- 拼音搜索 拼音首字母搜索 (pinyin-match) js
- editormd 上传图片问题解决
- 基于OAI协议元数据收割的.NET资源
- 组装一台计算机的配置,要不要自己动手组装一台电脑?一文告诉你答案!
- 第1章 微处理器、微型计算机、微型计算机系统的区别
- Java之~~包(package)
- ThinkPad E40 XP 安装SATA/AHCI驱动
- 当年轻人开始拼命戒抖音
- 基于 FFMPEG 的像素格式变换(swscale,致敬雷霄骅)
- Java新手上路--算数运算符