OpenCV 的LAB 颜色空间(也称为 CIELAB)是一种颜色对手的颜色模型,它旨在模仿人类的色彩感知。LAB 颜色空间由三个分量组成:
L: 亮度分量 (Lightness),范围从 0(黑色)到 100(白色)。
A: 范围从 -127 到 +127,表示从绿色到红色的变化。
B: 范围从 -127 到 +127,表示从蓝色到黄色的变化。
在 OpenCV 中,可以使用 cvtColor 函数来将图像从一种颜色空间转换到另一种颜色空间,包括转换到 LAB 颜色空间。我们可以通过L的亮度分量来初步判断当前摄像头获取的图像颜色偏暗还是偏亮,若是偏暗可以采用补光的方式来增加外部环境的光照亮度。简单的实例代码如下:
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
cv::VideoCapture *m_capture = new cv::VideoCapture;
cv::Mat img;
// 打开摄像头
m_capture->open(0,cv::CAP_V4L2);
m_capture->set( cv::CAP_PROP_FRAME_WIDTH, 800 );
m_capture->set( cv::CAP_PROP_FRAME_HEIGHT, 600 );
while(1)
{
// 读取图像
m_capture->read(img) ;
if (img.empty()) {
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
// 显示原始图像
cv::imshow("Original Image", img);
// 将图像从 BGR 转换为 LAB
cv::Mat lab_img;
cv::cvtColor(img, lab_img, cv::COLOR_BGR2Lab);
// 分离 LAB 图像通道
std::vector<cv::Mat> lab_planes;
cv::split(lab_img, lab_planes);
// 显示 LAB 图像的每个通道
cv::imshow("L Channel", lab_planes[0]);
cv::imshow("A Channel", lab_planes[1]);
cv::imshow("B Channel", lab_planes[2]);
}
return 0;
}