OpenCV颜色空间——Lab颜色空间
opencv
OpenCV: 开源计算机视觉库
项目地址:https://gitcode.com/gh_mirrors/opencv31/opencv
免费下载资源
·
对于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;
}
GitHub 加速计划 / opencv31 / opencv
77.38 K
55.71 K
下载
OpenCV: 开源计算机视觉库
最近提交(Master分支:2 个月前 )
c3747a68
Added Universal Windows Package build to CI. 8 天前
9b635da5 - 8 天前
更多推荐
已为社区贡献2条内容
所有评论(0)