您的位置:首页 > 其它

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

2015-08-28 16:16 225 查看

简介

LAB颜色空间在计算机视觉中经常被使用,知道L,A,B三个通道的取值范围有一定的意义。

OpenCV获取LAB取值范围

下面是一段实验代码,用于获取LAB的取值范围。

基本思路是,排列组合所有RGB可能,然后转变成LAB,在所得LAB中求取最大最小值。

#include <iostream>
#include <vector>
using namespace std;

#include <opencv2/opencv.hpp>
using namespace cv;

int main(int argc, char** argv){

Mat img(256, 256, CV_32FC3);

vector<float> pv(256);

// pixel color is in [0.f, 1.f];
for (int t = 0; t < 256; t++){
pv[t] = t / 255.f;
}

Mat img_lab;
vector<Mat> mv;

float min_l = FLT_MAX, max_l = FLT_MIN;
float min_a = FLT_MAX, max_a = FLT_MIN;
float min_b = FLT_MAX, max_b = FLT_MIN;

for (int c1 = 0; c1 < 256; c1++){
for (int c2 = 0; c2 < 256; c2++){
for (int c3 = 0; c3 < 256; c3++){
img.at<Vec3f>(c2, c3) = Vec3f(pv[c1], pv[c2], pv[c3]);
}
}

cvtColor(img, img_lab, CV_BGR2Lab);

cv::split(img_lab, mv);
double min_val, max_val;
cv::Point min_loc, max_loc;
cv::minMaxLoc(mv[0], &min_val, &max_val, &min_loc, &max_loc); // L
if (min_l > min_val) min_l = min_val;
if (max_l < max_val) max_l = max_val;

cv::minMaxLoc(mv[1], &min_val, &max_val, &min_loc, &max_loc); // A
if (min_a > min_val) min_a = min_val;
if (max_a < max_val) max_a = max_val;

cv::minMaxLoc(mv[2], &min_val, &max_val, &min_loc, &max_loc); // B
if (min_b > min_val) min_b = min_val;
if (max_b < max_val) max_b = max_val;

imshow("test", img);
waitKey(10);
cout << "step : " << c1 << endl;
}

cout << "L [" << min_l << ", " << max_l << "]" << endl;
cout << "A [" << min_a << ", " << max_a << "]" << endl;
cout << "B [" << min_b << ", " << max_b << "]" << endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: